home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / m / musik / duedita / duedita.gfa (.txt) next >
Encoding:
GFA-BASIC Atari  |  1996-11-17  |  245.9 KB  |  7,002 lines

  1. ' Programm für 2x320 Achtel-Noten lange Duette  ! DUEDITA.GFA  1-2/1991 Vers.2.0
  2. ' ##############################################################################
  3. ON ERROR GOSUB a_fehler_abfangen                ! Tonumfang.......: 4 Oktaven
  4. @0_globalvariablen_notenspeicher                ! Notenzahl.insg..: 2 x 320
  5. @0_globalvariablen_grafik                       ! Sückzahl.pro.Blk: 160
  6. @0_globalvariablen_menue                        ! Angepaßtes Keyb.: Casio MT-260
  7. @0_grafische_vorbereitungen_mit_inline          ! Programmierspr..: GFA-Basic3.0
  8. @0_sonstige_vorbereitungen                      ! Autor...........: Mittelmaier
  9. @0_oberste_schleife_hauptprogramm               ! Adresse.........: Ufnau3,1B21
  10. ' ##############################################################################
  11. '   V O R B E R E I T U N G E N :
  12. ' ##############################################################################
  13. > PROCEDURE 0_globalvariablen_notenspeicher
  14.   ' ----------------------------------------------------------------------------
  15.   LOCAL n|                                      ! Stückzähler
  16.   ' ............................................................................
  17.   LET gsw!=FALSE                                ! Stimmwechselflag (Curs.setzen)
  18.   LET gmidi!=TRUE                               ! Midischalter
  19.   LET gnotencode!=TRUE                          ! Schalter für St.nr.codierung
  20.   LET gtaktschl!=TRUE                           ! Schalter für Taktschlagzeug
  21.   LET gbasistonlaenge|=13                       ! Wie lang soll ein Ton dauern
  22.   LET gk1|=4                                    ! Sound Kanal 1 Pipe organ
  23.   LET gk2|=4                                    ! Sound Kanal 2 Pipe organ St.1
  24.   LET gk3|=9                                    ! Sound Kanal 3 Percussion
  25.   LET gschl|=3                                  ! bestimmtes Schlagzeugf
  26.   LET gs|=1                                     ! Aktuelle Stimme (1 oder 2)
  27.   LET gat1#=0                                    ! Alte Tonhöhe '3_einzelnoten..'
  28.   LET gat2#=0                                    ! Alte Tonhöhe '3_einzelnoten..'
  29.   LET gc%=1                                     ! Cursorposition
  30.   LET gm%=320                                   ! Maximale Notenanzahl
  31.   LET gba%=0                                    ! Blockanfang
  32.   LET gbe%=0                                    ! Blockende
  33.   LET gbs|=0                                    ! Blockstimme
  34.   LET gfsb$=""                                  ! Fileselectbox fotografieren
  35.   LET gpfad$=""                                 ! Pfad für Fileselectbox
  36.   LET gbl$=""                                   ! Block-Speicherstring
  37.   LET gname$=""                                 ! aktueller Stückname
  38.   LET gbs|=0                                    ! Stimme während Block merken
  39.   DIM ga$(2)                                    ! Noten-Abspeicher-Array |1
  40.   DIM gu$(2)                                    ! Undo-Kopie von "
  41.   LET guname$=""                                ! Undo-Kopie vom Stücknamen
  42.   LET ghptfle$="NEUHAUPT.HFL"                   ! Hauptfilename
  43.   LET gts|=0                                    ! tatsächl.Stückzhl im Hauptfile
  44.   LET gm|=160                                   ! Maximale Stückzahl
  45.   DIM gs$(2,gm|)                                ! Hauptfilearray für Stücke
  46.   DIM gi$(gm|)                                  ! Hauptfilearray für Stücknamen
  47.   LET gts2|=0                                   ! Stückzahl im Hauptfile
  48.   DIM gs2$(2,gm|)                               ! Hauptfilearray für Stücke
  49.   DIM gi2$(gm|)                                 ! Hauptfilearray für Stücknamen
  50.   FOR n|=1 TO gm|                               ! Alle potentiellen Namen durch
  51.     LET gi2$(n|)="________"                     ! Stückname für leeres Stück
  52.   NEXT n|                                       ! nächster Stückname
  53.   LET ghptfle2$=""                              ! Hauptfilename
  54.   ' ----------------------------------------------------------------------------
  55.   ' |1:         Die Abspeicherung einer Note sieht wie folgt aus:
  56.   '             Bit 7: Gebunden, Bit 6: unt.Kl., Bit 5: Tktstr, Bit 0-4: Tonhöhe
  57.   '             Die obige Bitzähl. beginnt mit 0 von rechts! 'Normale' Zählung:
  58.   '             Bit 1: Gebunden, Bit 2: unt.Kl., Bit 3: Tktstr, Bit 4-8: Tonhöhe
  59.   ' ----------------------------------------------------------------------------
  60. RETURN
  61. > PROCEDURE 0_globalvariablen_grafik
  62.   ' ----------------------------------------------------------------------------
  63.   LOCAL z%                                      ! Zwischenergebnis
  64.   ' ............................................................................
  65.   LET gm$=""                                    ! Menüzeile
  66.   LET gns$=""                                   ! Notenschlüsselnegativ
  67.   LET gkl$=""                                   ! Klaviaturnegativ
  68.   ' ............................................................................
  69.   DIM gzvs%(9)                                  ! Zeilenvertikalstartarray
  70.   FOR i|=1 TO 8                                 ! alle 8 Zeilen durch
  71.     LET gzvs%(i|)=17+(i|-1)*48                  ! Vertikalstart der 1. Zeile |1
  72.   NEXT i|                                       ! nächste Zeile
  73.   ' ............................................................................
  74.   DIM gx%(2,gm%),gy%(2,320)                     ! Positionsarray für Noten x.St.
  75.   FOR i%=1 TO gm%                               ! Alle Notenpositionen durch
  76.     LET z%=(i%-1-TRUNC((i%-1)/80)*80)*8         ! x-Startposition links berechn.
  77.     LET gx%(1,i%)=z%                            ! x-Startposition links berechn.
  78.     LET z%=gzvs%(2*TRUNC((i%-1)/80)+1)+2        ! y-Startposition oben berechn.
  79.     LET gy%(1,i%)=z%                            ! y-Startposition oben berechn.
  80.   NEXT i%                                       ! nächste Notenposition
  81.   FOR i%=1 TO gm%                               ! Alle Notenpositionen durch
  82.     LET z%=(i%-1-TRUNC((i%-1)/80)*80)*8         ! x-Startposition links berechn.
  83.     LET gx%(2,i%)=z%                            ! x-Startposition links berechn.
  84.     LET z%=gzvs%(2*TRUNC((i%-1)/80)+2)+2        ! y-Startposition oben berechn.
  85.     LET gy%(2,i%)=z%                            ! y-Startposition oben berechn.
  86.   NEXT i%                                       ! nächste Notenposition
  87.   ' ............................................................................
  88.   RESTORE y_anfang_notenkopf                    ! Lesezeiger setzen
  89.   DIM gyan|(25)                                 ! Notenkopf-y-anfang-array
  90.   FOR i|=25 DOWNTO 1                            ! 2 Oktaven von oben nach unten
  91.     READ gyan|(i|)                              ! Notenkopfanf. der Note lesen
  92.   NEXT i|                                       ! nächstuntere Taste
  93.   DIM gb$(2,256)                                ! Noten-Foto-array |3
  94.   ' ----------------------------------------------------------------------------
  95.   ' |1:         Bei einer Bildschirmhöhe von 400-Menüzeile(16)=384 Punkten er-
  96.   '             gibt sich für jede der 8 Notenzeilen eine Höhe von 48 Punkten.
  97.   '             Array muß bis 9 dimensioniert werden wegen der Prozedur namens:
  98.   '             'Welcher_notenplatz'.
  99.   ' |2:         Am oberen Rand der Notenzeile befinden sich ja zwei Begren-
  100.   '             zungslinien. Diese werden noch nicht mitgezählt. Die 1.Linie da-
  101.   '             runter erhält die Nummer null, die zweite eins usw.
  102.   ' |3:         Bit 7: Gebunden, Bit 6: unt.Kl., Bit 5: Tktstr, Bit 0-4: Tonhöhe
  103.   '             Die obige Bitzähl. beginnt mit 0 von rechts! 'Normale' Zählung:
  104.   '             Bit 1: Gebunden, Bit 2: unt.Kl., Bit 3: Tktstr, Bit 4-8: Tonhöhe
  105.   ' ----------------------------------------------------------------------------
  106. RETURN
  107. > PROCEDURE 0_globalvariablen_menue
  108.   ' ----------------------------------------------------------------------------
  109.   '     K o n s t a n t e n :
  110.   ' ----------------------------------------------------------------------------
  111.   LET gbb%=639                                  ! Bildschirmbreite
  112.   LET gbh%=399                                  ! Bildschirmhöhe
  113.   LET ghp$=""                                   ! Helptastenbildschirm
  114.   ' ----------------------------------------------------------------------------
  115.   '     L a u f v a r i a b l e n :
  116.   ' ----------------------------------------------------------------------------
  117.   LET gaccr!=FALSE                              ! Rausflag fürs Accessory-Menü
  118.   ' ----------------------------------------------------------------------------
  119. RETURN
  120. ' ------------------------------------------------------------------------------
  121. > PROCEDURE 0_grafische_vorbereitungen_mit_inline
  122.   ' ----------------------------------------------------------------------------
  123.   @1_statt_zeichnen_inline                      ! diese Zeile aktiv (=ohne ')
  124.   '                                             !
  125.   @1_klaviatur_fotografieren                    !
  126.   @1_notenschluessel_fotografieren              !
  127.   @1_notenbilder_fotografieren                  !
  128.   @1_workscreen_notenlinien_zeichnen            ! nicht fotografiert weg.Speichr
  129.   @1_workscreen_menue                           !
  130.   @1_cursor_setzen                              !
  131.   DEFMOUSE 0                                    ! Maus als Pfeil (nicht Biene)
  132.   ' ----------------------------------------------------------------------------
  133.   ' Statt dieser Prozedur hätte auch aufgerufen werden können:
  134.   ' PROCEDURE 0_grafische_vorbereitungen_ohne_inline
  135.   ' ----------------------------------------------------------------------------
  136. RETURN
  137. > PROCEDURE 1_workscreen_notenlinien_zeichnen
  138.   ' ----------------------------------------------------------------------------
  139.   CLS                                           ! Bildschirm löschen
  140.   ' ............................................................................
  141.   FOR i|=1 TO 8                                 ! alle 8 Zeilen durch
  142.     ' ..........................................................................
  143.     IF ODD(i|)                                  ! f i| ungerade:
  144.       DEFLINE 1                                 ! durchgezogene Linie
  145.     ELSE                                        ! sonst (d.h. 2.Stimme)
  146.       @a_gepunktete_linie                       ! gepunktet, kleiner Abstand
  147.     ENDIF                                       !
  148.     LET y%=gzvs%(i|)                            ! y-Koord. zw.speichern
  149.     LINE 0,y%,639,y%                            ! 1. obere Begrenzungslinie
  150.     LET y%=gzvs%(i|)+1                          ! y-Koord. zw.speichern
  151.     LINE 0,y%,639,y%                            ! 2. obere Begrenzungslinie
  152.     ' ..........................................................................
  153.     FOR j|=1 TO 8                               ! alle Notenlinien durch
  154.       LET y%=gzvs%(i|)+1+5*j|                   ! y-Koord. zw.speichern
  155.       IF j|=1 OR j|=2 OR j|=8                   ! obersten 2 und 8.Hilfslinien
  156.         DEFLINE 3                               ! gepunktet, großer Abstand
  157.       ELSE                                      ! normale Notenlinie
  158.         DEFLINE 1                               ! durchgezogene Linie
  159.         LINE 0,y%,639,y%                        ! Notenlinie
  160.       ENDIF                                     !
  161.     NEXT j|                                     ! nächste Notenlinie
  162.     DEFLINE 1                                   ! durchgezogene Linie
  163.     ' ..........................................................................
  164.   NEXT i|                                       ! nächste Zeile
  165.   ' ............................................................................
  166.   LINE 0,16,639,16                              ! Begrenzungslinie zum Menü
  167.   ' ----------------------------------------------------------------------------
  168. RETURN
  169. > PROCEDURE 1_statt_zeichnen_inline
  170.   ' ----------------------------------------------------------------------------
  171.   LOCAL a1%                                     ! Adressvariable
  172.   LOCAL a1#                                      ! Bildschirmspeicherstring
  173.   ' ............................................................................
  174.   '                                             ! |1
  175. ' ## INLINE:
  176. ' $0000: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  177. ' $0010: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  178. ' $0020: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  179. ' $0030: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  180. ' $0040: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  181. ' $0050: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  182. ' $0060: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  183. ' $0070: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  184. ' $0080: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  185. ' $0090: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  186. ' $00a0: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  187. ' $00b0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  188. ' $00c0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  189. ' $00d0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  190. ' $00e0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  191. ' $00f0: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  192. ' $0100: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  193. ' $0110: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  194. ' $0120: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  195. ' $0130: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  196. ' $0140: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  197. ' $0150: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  198. ' $0160: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  199. ' $0170: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  200. ' $0180: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  201. ' $0190: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  202. ' $01a0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  203. ' $01b0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  204. ' $01c0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  205. ' $01d0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  206. ' $01e0: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  207. ' $01f0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  208. ' $0200: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  209. ' $0210: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  210. ' $0220: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  211. ' $0230: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  212. ' $0240: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  213. ' $0250: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  214. ' $0260: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  215. ' $0270: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  216. ' $0280: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  217. ' $0290: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  218. ' $02a0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  219. ' $02b0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  220. ' $02c0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  221. ' $02d0: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  222. ' $02e0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  223. ' $02f0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  224. ' $0300: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  225. ' $0310: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  226. ' $0320: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  227. ' $0330: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  228. ' $0340: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  229. ' $0350: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  230. ' $0360: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  231. ' $0370: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  232. ' $0380: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  233. ' $0390: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  234. ' $03a0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  235. ' $03b0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  236. ' $03c0: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  237. ' $03d0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  238. ' $03e0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  239. ' $03f0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  240. ' $0400: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  241. ' $0410: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  242. ' $0420: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  243. ' $0430: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  244. ' $0440: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  245. ' $0450: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  246. ' $0460: aa aa a8 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  247. ' $0470: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  248. ' $0480: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  249. ' $0490: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  250. ' $04a0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  251. ' $04b0: 55 55 58 00 00 07 ff ff fe 00 00 01 ff ff ff 80 
  252. ' $04c0: 00 00 40 00 00 3f ff ff f0 00 00 0f ff ff fc 00 
  253. ' $04d0: 00 03 ff ff ff 00 00 00 80 00 00 7f ff ff e0 00 
  254. ' $04e0: 00 1f ff ff f8 00 00 04 00 00 03 ff ff ff 00 00 
  255. ' $04f0: 00 ff ff ff c0 00 00 3f ff ff f0 00 00 08 00 00 
  256. ' $0500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  257. ' $0510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  258. ' $0520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  259. ' $0530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  260. ' $0540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  261. ' $0550: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  262. ' $0560: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  263. ' $0570: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  264. ' $0580: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  265. ' $0590: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  266. ' $05a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  267. ' $05b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  268. ' $05c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  269. ' $05d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  270. ' $05e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  271. ' $05f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  272. ' $0600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  273. ' $0610: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  274. ' $0620: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  275. ' $0630: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  276. ' $0640: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  277. ' $0650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  278. ' $0660: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  279. ' $0670: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  280. ' $0680: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  281. ' $0690: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  282. ' $06a0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  283. ' $06b0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  284. ' $06c0: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  285. ' $06d0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  286. ' $06e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  287. ' $06f0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  288. ' $0700: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  289. ' $0710: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  290. ' $0720: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  291. ' $0730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  292. ' $0740: 00 00 00 00 00 00 7e 00 ff 00 00 00 00 00 08 08 
  293. ' $0750: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  294. ' $0760: 08 08 08 08 7e 08 ff 00 00 00 00 00 00 00 00 00 
  295. ' $0770: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  296. ' $0780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  297. ' $0790: 00 00 00 00 00 00 7e 7e 7e 00 00 00 00 00 08 08 
  298. ' $07a0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  299. ' $07b0: 08 08 08 08 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  300. ' $07c0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  301. ' $07d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  302. ' $07e0: 00 00 00 00 00 00 00 7e 7e 00 00 00 00 00 08 08 
  303. ' $07f0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  304. ' $0800: 08 08 08 08 00 7e 7e 00 00 00 00 00 00 00 00 00 
  305. ' $0810: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  306. ' $0820: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  307. ' $0830: 00 00 00 00 7e 7e 7e 7e 08 00 00 00 00 00 08 08 
  308. ' $0840: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  309. ' $0850: 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  310. ' $0860: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  311. ' $0870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  312. ' $0880: 00 00 00 00 7e 7e 7e 7e 08 00 00 00 00 00 08 08 
  313. ' $0890: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  314. ' $08a0: 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  315. ' $08b0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  316. ' $08c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  317. ' $08d0: 00 00 7e 00 00 ff ff ff ff 00 00 00 00 00 08 08 
  318. ' $08e0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  319. ' $08f0: 7e 08 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  320. ' $0900: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  321. ' $0910: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  322. ' $0920: 00 00 7e 7e 7e 7e 7e 08 08 00 00 00 00 00 08 08 
  323. ' $0930: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  324. ' $0940: 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  325. ' $0950: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  326. ' $0960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  327. ' $0970: 00 00 00 7e 7e 7e 7e 08 08 00 00 00 00 00 08 08 
  328. ' $0980: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  329. ' $0990: 00 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  330. ' $09a0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  331. ' $09b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  332. ' $09c0: 00 7e 7e 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  333. ' $09d0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  334. ' $09e0: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  335. ' $09f0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  336. ' $0a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  337. ' $0a10: 00 7e 7e 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  338. ' $0a20: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  339. ' $0a30: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  340. ' $0a40: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  341. ' $0a50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  342. ' $0a60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  343. ' $0a70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  344. ' $0a80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  345. ' $0a90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  346. ' $0aa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 
  347. ' $0ab0: 7e 7e 7e 08 08 08 08 08 08 00 00 00 00 00 08 08 
  348. ' $0ac0: 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 
  349. ' $0ad0: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  350. ' $0ae0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  351. ' $0af0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  352. ' $0b00: 7e 7e 7e 08 08 08 08 08 08 00 00 00 00 00 08 08 
  353. ' $0b10: 08 08 08 08 08 08 08 08 08 08 08 08 08 00 7e 7e 
  354. ' $0b20: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  355. ' $0b30: 00 00 00 00 00 00 00 00 00 00 00 3c 00 00 3c 00 
  356. ' $0b40: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  357. ' $0b50: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  358. ' $0b60: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 
  359. ' $0b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  360. ' $0b80: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  361. ' $0b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  362. ' $0ba0: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  363. ' $0bb0: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 
  364. ' $0bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  365. ' $0bd0: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  366. ' $0be0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 ff ff 
  367. ' $0bf0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  368. ' $0c00: ff ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff 
  369. ' $0c10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  370. ' $0c20: ff ff ff ff ff ff ff ff ff ff ff e7 ff ff e7 ff 
  371. ' $0c30: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 
  372. ' $0c40: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  373. ' $0c50: 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 
  374. ' $0c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  375. ' $0c70: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  376. ' $0c80: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 
  377. ' $0c90: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  378. ' $0ca0: 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 
  379. ' $0cb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  380. ' $0cc0: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  381. ' $0cd0: 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 08 08 
  382. ' $0ce0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  383. ' $0cf0: 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 00 00 
  384. ' $0d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  385. ' $0d10: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  386. ' $0d20: 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 08 08 
  387. ' $0d30: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  388. ' $0d40: 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 00 00 
  389. ' $0d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  390. ' $0d60: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  391. ' $0d70: ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff ff 
  392. ' $0d80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  393. ' $0d90: ff ff ff ff ff ff ff ff 81 ff ff ff ff ff ff ff 
  394. ' $0da0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  395. ' $0db0: ff ff ff ff ff ff ff ff ff ff ff e7 ff ff e7 ff 
  396. ' $0dc0: 00 00 00 00 00 00 00 00 7e 7e 7e 7e 08 08 08 08 
  397. ' $0dd0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  398. ' $0de0: 08 08 08 08 08 08 7e 7e 7e 7e 00 00 00 00 00 00 
  399. ' $0df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  400. ' $0e00: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  401. ' $0e10: 00 00 00 00 00 00 00 00 00 7e 7e 7e 08 08 08 08 
  402. ' $0e20: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  403. ' $0e30: 08 08 08 08 08 08 00 7e 7e 7e 00 00 00 00 00 00 
  404. ' $0e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  405. ' $0e50: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  406. ' $0e60: 00 00 00 00 00 00 7e 7e 7e 7e 7e 08 08 08 08 08 
  407. ' $0e70: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  408. ' $0e80: 08 08 08 08 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 
  409. ' $0e90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  410. ' $0ea0: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  411. ' $0eb0: 00 00 00 00 00 00 7e 7e 7e 7e 7e 08 08 08 08 08 
  412. ' $0ec0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  413. ' $0ed0: 08 08 08 08 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 
  414. ' $0ee0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  415. ' $0ef0: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  416. ' $0f00: ff ff ff ff ff ff 81 ff ff ff ff ff ff ff ff ff 
  417. ' $0f10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  418. ' $0f20: ff ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff 
  419. ' $0f30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  420. ' $0f40: ff ff ff ff ff ff ff ff ff ff ff e7 ff ff e7 ff 
  421. ' $0f50: 00 00 00 00 00 7e 7e 7e 7e 08 08 08 08 08 08 08 
  422. ' $0f60: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  423. ' $0f70: 08 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  424. ' $0f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  425. ' $0f90: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  426. ' $0fa0: 00 00 00 00 00 7e 7e 7e 7e 08 08 08 08 08 08 08 
  427. ' $0fb0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  428. ' $0fc0: 08 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  429. ' $0fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  430. ' $0fe0: 00 00 00 00 00 00 00 00 00 00 00 24 00 00 24 00 
  431. ' $0ff0: 00 00 00 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 
  432. ' $1000: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  433. ' $1010: 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  434. ' $1020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  435. ' $1030: 00 00 00 00 00 00 00 00 00 00 00 3c 00 00 3c 00 
  436. ' $1040: 00 00 00 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 
  437. ' $1050: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  438. ' $1060: 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  439. ' $1070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  440. ' $1080: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  441. ' $1090: ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff ff 
  442. ' $10a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  443. ' $10b0: ff 81 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  444. ' $10c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  445. ' $10d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  446. ' $10e0: 00 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 
  447. ' $10f0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 7e 
  448. ' $1100: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  449. ' $1110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  450. ' $1120: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  451. ' $1130: 00 00 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 
  452. ' $1140: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 00 
  453. ' $1150: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  454. ' $1160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  455. ' $1170: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  456. ' $1180: 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  457. ' $1190: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  458. ' $11a0: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  459. ' $11b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  460. ' $11c0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  461. ' $11d0: 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  462. ' $11e0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  463. ' $11f0: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  464. ' $1200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  465. ' $1210: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  466. ' $1220: ff ff 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  467. ' $1230: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 ff ff 
  468. ' $1240: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  469. ' $1250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  470. ' $1260: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  471. ' $1270: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  472. ' $1280: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  473. ' $1290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  474. ' $12a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  475. ' $12b0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  476. ' $12c0: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  477. ' $12d0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  478. ' $12e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  479. ' $12f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  480. ' $1300: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  481. ' $1310: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  482. ' $1320: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  483. ' $1330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  484. ' $1340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  485. ' $1350: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  486. ' $1360: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  487. ' $1370: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  488. ' $1380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  489. ' $1390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  490. ' $13a0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  491. ' $13b0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  492. ' $13c0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  493. ' $13d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  494. ' $13e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  495. ' $13f0: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  496. ' $1400: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  497. ' $1410: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  498. ' $1420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  499. ' $1430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  500. ' $1440: 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 00 
  501. ' $1450: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  502. ' $1460: 5d 5d 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 55 55 
  503. ' $1470: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  504. ' $1480: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  505. ' $1490: 55 55 55 55 55 55 55 55 55 55 55 5d 55 55 55 55 
  506. ' $14a0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  507. ' $14b0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  508. ' $14c0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  509. ' $14d0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  510. ' $14e0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  511. ' $14f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  512. ' $1500: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  513. ' $1510: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  514. ' $1520: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  515. ' $1530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  516. ' $1540: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  517. ' $1550: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  518. ' $1560: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  519. ' $1570: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  520. ' $1580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  521. ' $1590: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  522. ' $15a0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  523. ' $15b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  524. ' $15c0: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  525. ' $15d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  526. ' $15e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  527. ' $15f0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  528. ' $1600: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  529. ' $1610: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  530. ' $1620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  531. ' $1630: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  532. ' $1640: 18 18 18 18 18 18 7e 18 ff 00 00 00 00 00 18 18 
  533. ' $1650: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  534. ' $1660: 18 18 18 18 7e 18 ff 00 00 00 00 00 00 00 00 00 
  535. ' $1670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  536. ' $1680: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  537. ' $1690: 18 18 18 18 18 18 7e 7e 7e 00 00 00 00 00 18 18 
  538. ' $16a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  539. ' $16b0: 18 18 18 18 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  540. ' $16c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  541. ' $16d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  542. ' $16e0: 18 18 18 18 18 18 00 7e 7e 00 00 00 00 00 18 18 
  543. ' $16f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  544. ' $1700: 18 18 18 18 00 7e 7e 00 00 00 00 00 00 00 00 00 
  545. ' $1710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  546. ' $1720: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  547. ' $1730: 18 18 18 18 7e 7e 7e 7e 18 00 00 00 00 00 18 18 
  548. ' $1740: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  549. ' $1750: 18 18 7e 7e 7e 7e 18 00 00 00 00 00 00 00 00 00 
  550. ' $1760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  551. ' $1770: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  552. ' $1780: 18 18 18 18 7e 7e 7e 7e 18 00 00 00 00 00 18 18 
  553. ' $1790: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  554. ' $17a0: 18 18 7e 7e 7e 7e 18 00 00 00 00 00 00 00 00 00 
  555. ' $17b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  556. ' $17c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  557. ' $17d0: 18 18 7e 18 00 ff ff ff ff 00 00 00 00 00 18 18 
  558. ' $17e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  559. ' $17f0: 7e 18 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  560. ' $1800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  561. ' $1810: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  562. ' $1820: 18 18 7e 7e 7e 7e 7e 18 18 00 00 00 00 00 18 18 
  563. ' $1830: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  564. ' $1840: 7e 7e 7e 7e 7e 18 18 00 00 00 00 00 00 00 00 00 
  565. ' $1850: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  566. ' $1860: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  567. ' $1870: 18 18 00 7e 7e 7e 7e 18 18 00 00 00 00 00 18 18 
  568. ' $1880: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  569. ' $1890: 00 7e 7e 7e 7e 18 18 00 00 00 00 00 00 00 00 00 
  570. ' $18a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  571. ' $18b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  572. ' $18c0: 18 7e 7e 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  573. ' $18d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  574. ' $18e0: 7e 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  575. ' $18f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  576. ' $1900: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  577. ' $1910: 18 7e 7e 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  578. ' $1920: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  579. ' $1930: 7e 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  580. ' $1940: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  581. ' $1950: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  582. ' $1960: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  583. ' $1970: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  584. ' $1980: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  585. ' $1990: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  586. ' $19a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  587. ' $19b0: 7e 7e 7e 18 18 18 18 18 18 00 00 00 00 00 18 18 
  588. ' $19c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  589. ' $19d0: 7e 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  590. ' $19e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  591. ' $19f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 
  592. ' $1a00: 7e 7e 7e 18 18 18 18 18 18 00 00 00 00 00 18 18 
  593. ' $1a10: 18 18 18 18 18 18 18 18 18 18 18 18 18 00 7e 7e 
  594. ' $1a20: 7e 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  595. ' $1a30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  596. ' $1a40: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  597. ' $1a50: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  598. ' $1a60: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 
  599. ' $1a70: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  600. ' $1a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  601. ' $1a90: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  602. ' $1aa0: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  603. ' $1ab0: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 
  604. ' $1ac0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  605. ' $1ad0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  606. ' $1ae0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 ff ff 
  607. ' $1af0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  608. ' $1b00: ff ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff 
  609. ' $1b10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  610. ' $1b20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  611. ' $1b30: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 
  612. ' $1b40: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  613. ' $1b50: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 
  614. ' $1b60: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  615. ' $1b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  616. ' $1b80: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 
  617. ' $1b90: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  618. ' $1ba0: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 
  619. ' $1bb0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  620. ' $1bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  621. ' $1bd0: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 
  622. ' $1be0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  623. ' $1bf0: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 
  624. ' $1c00: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  625. ' $1c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  626. ' $1c20: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 
  627. ' $1c30: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  628. ' $1c40: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 
  629. ' $1c50: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  630. ' $1c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  631. ' $1c70: ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff ff 
  632. ' $1c80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  633. ' $1c90: ff ff ff ff ff ff ff ff 81 ff ff ff ff ff ff ff 
  634. ' $1ca0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  635. ' $1cb0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  636. ' $1cc0: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 
  637. ' $1cd0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  638. ' $1ce0: 18 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 
  639. ' $1cf0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  640. ' $1d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  641. ' $1d10: 18 18 18 18 18 18 18 18 00 7e 7e 7e 18 18 18 18 
  642. ' $1d20: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  643. ' $1d30: 18 18 18 18 18 18 00 7e 7e 7e 18 18 18 18 18 18 
  644. ' $1d40: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  645. ' $1d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  646. ' $1d60: 18 18 18 18 18 18 7e 7e 7e 7e 7e 18 18 18 18 18 
  647. ' $1d70: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  648. ' $1d80: 18 18 18 18 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 
  649. ' $1d90: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  650. ' $1da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  651. ' $1db0: 18 18 18 18 18 18 7e 7e 7e 7e 7e 18 18 18 18 18 
  652. ' $1dc0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  653. ' $1dd0: 18 18 18 18 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 
  654. ' $1de0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  655. ' $1df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  656. ' $1e00: ff ff ff ff ff ff 81 ff ff ff ff ff ff ff ff ff 
  657. ' $1e10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  658. ' $1e20: ff ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff 
  659. ' $1e30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  660. ' $1e40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  661. ' $1e50: 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 
  662. ' $1e60: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  663. ' $1e70: 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  664. ' $1e80: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  665. ' $1e90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  666. ' $1ea0: 18 18 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 
  667. ' $1eb0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  668. ' $1ec0: 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  669. ' $1ed0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  670. ' $1ee0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  671. ' $1ef0: 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  672. ' $1f00: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  673. ' $1f10: 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  674. ' $1f20: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  675. ' $1f30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  676. ' $1f40: 18 18 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  677. ' $1f50: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  678. ' $1f60: 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  679. ' $1f70: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  680. ' $1f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  681. ' $1f90: ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff ff 
  682. ' $1fa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  683. ' $1fb0: ff 81 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  684. ' $1fc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  685. ' $1fd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  686. ' $1fe0: 18 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  687. ' $1ff0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 7e 
  688. ' $2000: 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  689. ' $2010: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  690. ' $2020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  691. ' $2030: 18 00 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  692. ' $2040: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 00 
  693. ' $2050: 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  694. ' $2060: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  695. ' $2070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  696. ' $2080: 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  697. ' $2090: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  698. ' $20a0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  699. ' $20b0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  700. ' $20c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  701. ' $20d0: 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  702. ' $20e0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  703. ' $20f0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  704. ' $2100: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  705. ' $2110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  706. ' $2120: ff ff 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  707. ' $2130: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 ff ff 
  708. ' $2140: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  709. ' $2150: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  710. ' $2160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  711. ' $2170: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  712. ' $2180: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  713. ' $2190: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  714. ' $21a0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  715. ' $21b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  716. ' $21c0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  717. ' $21d0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  718. ' $21e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  719. ' $21f0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  720. ' $2200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  721. ' $2210: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  722. ' $2220: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  723. ' $2230: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  724. ' $2240: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  725. ' $2250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  726. ' $2260: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  727. ' $2270: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  728. ' $2280: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  729. ' $2290: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  730. ' $22a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  731. ' $22b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  732. ' $22c0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  733. ' $22d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  734. ' $22e0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  735. ' $22f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  736. ' $2300: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  737. ' $2310: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  738. ' $2320: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  739. ' $2330: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  740. ' $2340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  741. ' $2350: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  742. ' $2360: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  743. ' $2370: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  744. ' $2380: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  745. ' $2390: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  746. ' $23a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  747. ' $23b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  748. ' $23c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  749. ' $23d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  750. ' $23e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  751. ' $23f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  752. ' $2400: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  753. ' $2410: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  754. ' $2420: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  755. ' $2430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  756. ' $2440: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  757. ' $2450: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  758. ' $2460: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  759. ' $2470: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  760. ' $2480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  761. ' $2490: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  762. ' $24a0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  763. ' $24b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  764. ' $24c0: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  765. ' $24d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  766. ' $24e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  767. ' $24f0: 18 18 18 18 18 18 18 18 42 00 00 00 00 00 18 18 
  768. ' $2500: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  769. ' $2510: 18 18 18 18 18 18 42 00 00 00 00 00 00 00 00 00 
  770. ' $2520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  771. ' $2530: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  772. ' $2540: 18 18 18 18 18 18 7e 18 ff 00 00 00 00 00 18 18 
  773. ' $2550: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  774. ' $2560: 18 18 18 18 7e 18 ff 00 00 00 00 00 00 00 00 00 
  775. ' $2570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  776. ' $2580: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  777. ' $2590: 18 18 18 18 18 18 7e 7e 42 00 00 00 00 00 18 18 
  778. ' $25a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  779. ' $25b0: 18 18 18 18 7e 7e 42 00 00 00 00 00 00 00 00 00 
  780. ' $25c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  781. ' $25d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  782. ' $25e0: 18 18 18 18 18 18 00 42 7e 00 00 00 00 00 18 18 
  783. ' $25f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  784. ' $2600: 18 18 18 18 00 42 7e 00 00 00 00 00 00 00 00 00 
  785. ' $2610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  786. ' $2620: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  787. ' $2630: 18 18 18 18 7e 7e 7e 42 18 00 00 00 00 00 18 18 
  788. ' $2640: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  789. ' $2650: 18 18 7e 7e 7e 42 18 00 00 00 00 00 00 00 00 00 
  790. ' $2660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  791. ' $2670: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  792. ' $2680: 18 18 18 18 7e 42 42 42 18 00 00 00 00 00 18 18 
  793. ' $2690: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  794. ' $26a0: 18 18 7e 42 42 42 18 00 00 00 00 00 00 00 00 00 
  795. ' $26b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  796. ' $26c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  797. ' $26d0: 18 18 7e 18 00 ff ff ff ff 00 00 00 00 00 18 18 
  798. ' $26e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  799. ' $26f0: 7e 18 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  800. ' $2700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  801. ' $2710: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  802. ' $2720: 18 18 7e 7e 7e 42 42 18 18 00 00 00 00 00 18 18 
  803. ' $2730: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  804. ' $2740: 7e 7e 7e 42 42 18 18 00 00 00 00 00 00 00 00 00 
  805. ' $2750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  806. ' $2760: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  807. ' $2770: 18 18 00 42 42 7e 7e 18 18 00 00 00 00 00 18 18 
  808. ' $2780: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  809. ' $2790: 00 42 42 7e 7e 18 18 00 00 00 00 00 00 00 00 00 
  810. ' $27a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  811. ' $27b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  812. ' $27c0: 18 7e 7e 42 42 18 18 18 18 00 00 00 00 00 18 18 
  813. ' $27d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  814. ' $27e0: 7e 42 42 18 18 18 18 00 00 00 00 00 00 00 00 00 
  815. ' $27f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  816. ' $2800: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  817. ' $2810: 18 42 42 42 42 18 18 18 18 00 00 00 00 00 18 18 
  818. ' $2820: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 42 
  819. ' $2830: 42 42 42 18 18 18 18 00 00 00 00 00 00 00 00 00 
  820. ' $2840: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  821. ' $2850: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  822. ' $2860: ff c3 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  823. ' $2870: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff c3 
  824. ' $2880: c3 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  825. ' $2890: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  826. ' $28a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  827. ' $28b0: 7e 42 42 18 18 18 18 18 18 00 00 00 00 00 18 18 
  828. ' $28c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 42 
  829. ' $28d0: 42 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  830. ' $28e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  831. ' $28f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 
  832. ' $2900: 42 7e 7e 18 18 18 18 18 18 00 00 00 00 00 18 18 
  833. ' $2910: 18 18 18 18 18 18 18 18 18 18 18 18 18 00 42 7e 
  834. ' $2920: 7e 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  835. ' $2930: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  836. ' $2940: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  837. ' $2950: 42 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  838. ' $2960: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 42 18 
  839. ' $2970: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  840. ' $2980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  841. ' $2990: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 42 42 
  842. ' $29a0: 42 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  843. ' $29b0: 18 18 18 18 18 18 18 18 18 18 18 7e 42 42 42 18 
  844. ' $29c0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  845. ' $29d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  846. ' $29e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 
  847. ' $29f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  848. ' $2a00: ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 ff ff 
  849. ' $2a10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  850. ' $2a20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  851. ' $2a30: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 
  852. ' $2a40: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  853. ' $2a50: 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 18 18 
  854. ' $2a60: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  855. ' $2a70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  856. ' $2a80: 18 18 18 18 18 18 18 18 18 18 18 18 42 42 7e 7e 
  857. ' $2a90: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  858. ' $2aa0: 18 18 18 18 18 18 18 18 18 18 42 42 7e 7e 18 18 
  859. ' $2ab0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  860. ' $2ac0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  861. ' $2ad0: 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 18 18 
  862. ' $2ae0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  863. ' $2af0: 18 18 18 18 18 18 18 18 7e 7e 42 42 18 18 18 18 
  864. ' $2b00: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  865. ' $2b10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  866. ' $2b20: 18 18 18 18 18 18 18 18 18 18 7e 42 42 42 18 18 
  867. ' $2b30: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  868. ' $2b40: 18 18 18 18 18 18 18 18 7e 42 42 42 18 18 18 18 
  869. ' $2b50: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  870. ' $2b60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  871. ' $2b70: ff ff ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff 
  872. ' $2b80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  873. ' $2b90: ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff ff ff 
  874. ' $2ba0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  875. ' $2bb0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  876. ' $2bc0: 18 18 18 18 18 18 18 18 7e 7e 7e 42 18 18 18 18 
  877. ' $2bd0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  878. ' $2be0: 18 18 18 18 18 18 7e 7e 7e 42 18 18 18 18 18 18 
  879. ' $2bf0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  880. ' $2c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  881. ' $2c10: 18 18 18 18 18 18 18 18 00 42 42 7e 18 18 18 18 
  882. ' $2c20: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  883. ' $2c30: 18 18 18 18 18 18 00 42 42 7e 18 18 18 18 18 18 
  884. ' $2c40: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  885. ' $2c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  886. ' $2c60: 18 18 18 18 18 18 7e 7e 7e 42 42 18 18 18 18 18 
  887. ' $2c70: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  888. ' $2c80: 18 18 18 18 7e 7e 7e 42 42 18 18 18 18 18 18 18 
  889. ' $2c90: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  890. ' $2ca0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  891. ' $2cb0: 18 18 18 18 18 18 7e 42 42 42 42 18 18 18 18 18 
  892. ' $2cc0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  893. ' $2cd0: 18 18 18 18 7e 42 42 42 42 18 18 18 18 18 18 18 
  894. ' $2ce0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  895. ' $2cf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  896. ' $2d00: ff ff ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff 
  897. ' $2d10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  898. ' $2d20: ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff ff ff 
  899. ' $2d30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  900. ' $2d40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  901. ' $2d50: 18 18 18 18 18 7e 7e 42 42 18 18 18 18 18 18 18 
  902. ' $2d60: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  903. ' $2d70: 18 18 18 7e 7e 42 42 18 18 18 18 18 18 18 18 18 
  904. ' $2d80: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  905. ' $2d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  906. ' $2da0: 18 18 18 18 18 42 42 7e 7e 18 18 18 18 18 18 18 
  907. ' $2db0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  908. ' $2dc0: 18 18 18 42 42 7e 7e 18 18 18 18 18 18 18 18 18 
  909. ' $2dd0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  910. ' $2de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  911. ' $2df0: 18 18 18 7e 7e 42 42 18 18 18 18 18 18 18 18 18 
  912. ' $2e00: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  913. ' $2e10: 18 7e 7e 42 42 18 18 18 18 18 18 18 18 18 18 18 
  914. ' $2e20: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  915. ' $2e30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  916. ' $2e40: 18 18 18 7e 42 42 42 18 18 18 18 18 18 18 18 18 
  917. ' $2e50: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  918. ' $2e60: 18 7e 42 42 42 18 18 18 18 18 18 18 18 18 18 18 
  919. ' $2e70: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  920. ' $2e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  921. ' $2e90: ff ff ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff 
  922. ' $2ea0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  923. ' $2eb0: ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  924. ' $2ec0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  925. ' $2ed0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  926. ' $2ee0: 18 7e 7e 7e 42 18 18 18 18 18 18 18 18 18 18 18 
  927. ' $2ef0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 7e 
  928. ' $2f00: 7e 7e 42 18 18 18 18 18 18 18 18 18 18 18 18 18 
  929. ' $2f10: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  930. ' $2f20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  931. ' $2f30: 18 00 42 42 7e 18 18 18 18 18 18 18 18 18 18 18 
  932. ' $2f40: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 00 
  933. ' $2f50: 42 42 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  934. ' $2f60: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  935. ' $2f70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  936. ' $2f80: 7e 7e 42 42 18 18 18 18 18 18 18 18 18 18 18 18 
  937. ' $2f90: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  938. ' $2fa0: 42 42 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  939. ' $2fb0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  940. ' $2fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  941. ' $2fd0: 42 42 42 42 18 18 18 18 18 18 18 18 18 18 18 18 
  942. ' $2fe0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 42 42 
  943. ' $2ff0: 42 42 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  944. ' $3000: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  945. ' $3010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  946. ' $3020: ff ff 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  947. ' $3030: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 ff ff 
  948. ' $3040: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  949. ' $3050: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  950. ' $3060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  951. ' $3070: 42 42 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  952. ' $3080: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 42 42 
  953. ' $3090: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  954. ' $30a0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  955. ' $30b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  956. ' $30c0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  957. ' $30d0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  958. ' $30e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  959. ' $30f0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  960. ' $3100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  961. ' $3110: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  962. ' $3120: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  963. ' $3130: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  964. ' $3140: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  965. ' $3150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  966. ' $3160: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  967. ' $3170: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  968. ' $3180: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  969. ' $3190: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  970. ' $31a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  971. ' $31b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  972. ' $31c0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  973. ' $31d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  974. ' $31e0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  975. ' $31f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  976. ' $3200: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  977. ' $3210: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  978. ' $3220: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  979. ' $3230: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  980. ' $3240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  981. ' $3250: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  982. ' $3260: 5d 5d 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 5d 5d 
  983. ' $3270: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  984. ' $3280: 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 55 55 55 55 
  985. ' $3290: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  986. ' $32a0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  987. ' $32b0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  988. ' $32c0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  989. ' $32d0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  990. ' $32e0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  991. ' $32f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  992. ' $3300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  993. ' $3310: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  994. ' $3320: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  995. ' $3330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  996. ' $3340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  997. ' $3350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  998. ' $3360: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  999. ' $3370: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  1000. ' $3380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1001. ' $3390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1002. ' $33a0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  1003. ' $33b0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1004. ' $33c0: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  1005. ' $33d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1006. ' $33e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1007. ' $33f0: 00 00 00 00 00 00 00 00 42 00 00 00 00 00 08 08 
  1008. ' $3400: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1009. ' $3410: 08 08 08 08 08 08 42 00 00 00 00 00 00 00 00 00 
  1010. ' $3420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1011. ' $3430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1012. ' $3440: 00 00 00 00 00 00 7e 00 ff 00 00 00 00 00 08 08 
  1013. ' $3450: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1014. ' $3460: 08 08 08 08 7e 08 ff 00 00 00 00 00 00 00 00 00 
  1015. ' $3470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1016. ' $3480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1017. ' $3490: 00 00 00 00 00 00 7e 7e 42 00 00 00 00 00 08 08 
  1018. ' $34a0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1019. ' $34b0: 08 08 08 08 7e 7e 42 00 00 00 00 00 00 00 00 00 
  1020. ' $34c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1021. ' $34d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1022. ' $34e0: 00 00 00 00 00 00 00 42 7e 00 00 00 00 00 08 08 
  1023. ' $34f0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1024. ' $3500: 08 08 08 08 00 42 7e 00 00 00 00 00 00 00 00 00 
  1025. ' $3510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1026. ' $3520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1027. ' $3530: 00 00 00 00 7e 7e 7e 42 08 00 00 00 00 00 08 08 
  1028. ' $3540: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1029. ' $3550: 08 08 7e 7e 7e 42 00 00 00 00 00 00 00 00 00 00 
  1030. ' $3560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1031. ' $3570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1032. ' $3580: 00 00 00 00 7e 42 42 42 08 00 00 00 00 00 08 08 
  1033. ' $3590: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1034. ' $35a0: 08 08 7e 42 42 42 00 00 00 00 00 00 00 00 00 00 
  1035. ' $35b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1036. ' $35c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1037. ' $35d0: 00 00 7e 00 00 ff ff ff ff 00 00 00 00 00 08 08 
  1038. ' $35e0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1039. ' $35f0: 7e 08 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  1040. ' $3600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1041. ' $3610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1042. ' $3620: 00 00 7e 7e 7e 42 42 08 08 00 00 00 00 00 08 08 
  1043. ' $3630: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1044. ' $3640: 7e 7e 7e 42 42 00 00 00 00 00 00 00 00 00 00 00 
  1045. ' $3650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1046. ' $3660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1047. ' $3670: 00 00 00 42 42 7e 7e 08 08 00 00 00 00 00 08 08 
  1048. ' $3680: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1049. ' $3690: 00 42 42 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  1050. ' $36a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1051. ' $36b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1052. ' $36c0: 00 7e 7e 42 42 08 08 08 08 00 00 00 00 00 08 08 
  1053. ' $36d0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  1054. ' $36e0: 7e 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1055. ' $36f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1056. ' $3700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1057. ' $3710: 00 42 42 42 42 08 08 08 08 00 00 00 00 00 08 08 
  1058. ' $3720: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 42 
  1059. ' $3730: 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1060. ' $3740: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1061. ' $3750: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1062. ' $3760: ff c3 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1063. ' $3770: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff c3 
  1064. ' $3780: c3 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1065. ' $3790: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1066. ' $37a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 
  1067. ' $37b0: 7e 42 42 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1068. ' $37c0: 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 7e 42 
  1069. ' $37d0: 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1070. ' $37e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1071. ' $37f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1072. ' $3800: 42 7e 7e 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1073. ' $3810: 08 08 08 08 08 08 08 08 08 08 08 08 08 00 42 7e 
  1074. ' $3820: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1075. ' $3830: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1076. ' $3840: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  1077. ' $3850: 42 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1078. ' $3860: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 42 00 
  1079. ' $3870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1080. ' $3880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1081. ' $3890: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 42 42 
  1082. ' $38a0: 42 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1083. ' $38b0: 08 08 08 08 08 08 08 08 08 08 08 7e 42 42 42 00 
  1084. ' $38c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1085. ' $38d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1086. ' $38e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 
  1087. ' $38f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1088. ' $3900: ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 ff ff 
  1089. ' $3910: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1090. ' $3920: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1091. ' $3930: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 42 42 
  1092. ' $3940: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1093. ' $3950: 08 08 08 08 08 08 08 08 08 08 7e 7e 42 42 00 00 
  1094. ' $3960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1095. ' $3970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1096. ' $3980: 00 00 00 00 00 00 00 00 00 00 00 00 42 42 7e 7e 
  1097. ' $3990: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1098. ' $39a0: 08 08 08 08 08 08 08 08 08 08 42 42 7e 7e 00 00 
  1099. ' $39b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1100. ' $39c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1101. ' $39d0: 00 00 00 00 00 00 00 00 00 00 7e 7e 42 42 08 08 
  1102. ' $39e0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1103. ' $39f0: 08 08 08 08 08 08 08 08 7e 7e 42 42 00 00 00 00 
  1104. ' $3a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1105. ' $3a10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1106. ' $3a20: 00 00 00 00 00 00 00 00 00 00 7e 42 42 42 08 08 
  1107. ' $3a30: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1108. ' $3a40: 08 08 08 08 08 08 08 08 7e 42 42 42 00 00 00 00 
  1109. ' $3a50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1110. ' $3a60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1111. ' $3a70: ff ff ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff 
  1112. ' $3a80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1113. ' $3a90: ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff ff ff 
  1114. ' $3aa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1115. ' $3ab0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1116. ' $3ac0: 00 00 00 00 00 00 00 00 7e 7e 7e 42 08 08 08 08 
  1117. ' $3ad0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1118. ' $3ae0: 08 08 08 08 08 08 7e 7e 7e 42 00 00 00 00 00 00 
  1119. ' $3af0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1120. ' $3b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1121. ' $3b10: 00 00 00 00 00 00 00 00 00 42 42 7e 08 08 08 08 
  1122. ' $3b20: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1123. ' $3b30: 08 08 08 08 08 08 00 42 42 7e 00 00 00 00 00 00 
  1124. ' $3b40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1125. ' $3b50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1126. ' $3b60: 00 00 00 00 00 00 7e 7e 7e 42 42 08 08 08 08 08 
  1127. ' $3b70: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1128. ' $3b80: 08 08 08 08 7e 7e 7e 42 42 00 00 00 00 00 00 00 
  1129. ' $3b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1130. ' $3ba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1131. ' $3bb0: 00 00 00 00 00 00 7e 42 42 42 42 08 08 08 08 08 
  1132. ' $3bc0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1133. ' $3bd0: 08 08 08 08 7e 42 42 42 42 00 00 00 00 00 00 00 
  1134. ' $3be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1135. ' $3bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1136. ' $3c00: ff ff ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff 
  1137. ' $3c10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1138. ' $3c20: ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff ff ff 
  1139. ' $3c30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1140. ' $3c40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1141. ' $3c50: 00 00 00 00 00 7e 7e 42 42 08 08 08 08 08 08 08 
  1142. ' $3c60: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1143. ' $3c70: 08 08 08 7e 7e 42 42 00 00 00 00 00 00 00 00 00 
  1144. ' $3c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1145. ' $3c90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1146. ' $3ca0: 00 00 00 00 00 42 42 7e 7e 08 08 08 08 08 08 08 
  1147. ' $3cb0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1148. ' $3cc0: 08 08 08 42 42 7e 7e 00 00 00 00 00 00 00 00 00 
  1149. ' $3cd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1150. ' $3ce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1151. ' $3cf0: 00 00 00 7e 7e 42 42 08 08 08 08 08 08 08 08 08 
  1152. ' $3d00: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1153. ' $3d10: 08 7e 7e 42 42 00 00 00 00 00 00 00 00 00 00 00 
  1154. ' $3d20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1155. ' $3d30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1156. ' $3d40: 00 00 00 7e 42 42 42 08 08 08 08 08 08 08 08 08 
  1157. ' $3d50: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1158. ' $3d60: 08 7e 42 42 42 00 00 00 00 00 00 00 00 00 00 00 
  1159. ' $3d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1160. ' $3d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1161. ' $3d90: ff ff ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff 
  1162. ' $3da0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1163. ' $3db0: ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1164. ' $3dc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1165. ' $3dd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1166. ' $3de0: 00 7e 7e 7e 42 08 08 08 08 08 08 08 08 08 08 08 
  1167. ' $3df0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 7e 
  1168. ' $3e00: 7e 7e 42 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1169. ' $3e10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1170. ' $3e20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1171. ' $3e30: 00 00 42 42 7e 08 08 08 08 08 08 08 08 08 08 08 
  1172. ' $3e40: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 00 
  1173. ' $3e50: 42 42 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1174. ' $3e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1175. ' $3e70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1176. ' $3e80: 7e 7e 42 42 08 08 08 08 08 08 08 08 08 08 08 08 
  1177. ' $3e90: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1178. ' $3ea0: 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1179. ' $3eb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1180. ' $3ec0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1181. ' $3ed0: 42 42 42 42 08 08 08 08 08 08 08 08 08 08 08 08 
  1182. ' $3ee0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 42 42 
  1183. ' $3ef0: 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1184. ' $3f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1185. ' $3f10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1186. ' $3f20: ff ff 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  1187. ' $3f30: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 ff ff 
  1188. ' $3f40: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1189. ' $3f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1190. ' $3f60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1191. ' $3f70: 42 42 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1192. ' $3f80: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 42 42 
  1193. ' $3f90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1194. ' $3fa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1195. ' $3fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1196. ' $3fc0: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1197. ' $3fd0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1198. ' $3fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1199. ' $3ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1200. ' $4000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1201. ' $4010: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1202. ' $4020: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1203. ' $4030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1204. ' $4040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1205. ' $4050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1206. ' $4060: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1207. ' $4070: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1208. ' $4080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1209. ' $4090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1210. ' $40a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1211. ' $40b0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1212. ' $40c0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1213. ' $40d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1214. ' $40e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1215. ' $40f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1216. ' $4100: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1217. ' $4110: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1218. ' $4120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1219. ' $4130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1220. ' $4140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1221. ' $4150: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1222. ' $4160: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1223. ' $4170: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1224. ' $4180: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1225. ' $4190: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1226. ' $41a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1227. ' $41b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1228. ' $41c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1229. ' $41d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1230. ' $41e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1231. ' $41f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1232. ' $4200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  1233. ' $4210: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1234. ' $4220: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  1235. ' $4230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1236. ' $4240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1237. ' $4250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  1238. ' $4260: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1239. ' $4270: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  1240. ' $4280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1241. ' $4290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1242. ' $42a0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  1243. ' $42b0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1244. ' $42c0: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  1245. ' $42d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1246. ' $42e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1247. ' $42f0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  1248. ' $4300: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1249. ' $4310: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  1250. ' $4320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1251. ' $4330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1252. ' $4340: 00 00 00 00 00 00 7e 00 ff 00 00 00 00 00 08 08 
  1253. ' $4350: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1254. ' $4360: 08 08 08 08 7e 08 ff 00 00 00 00 00 00 00 00 00 
  1255. ' $4370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1256. ' $4380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1257. ' $4390: 00 00 00 00 00 00 7e 7e 7e 00 00 00 00 00 08 08 
  1258. ' $43a0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1259. ' $43b0: 08 08 08 08 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1260. ' $43c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1261. ' $43d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1262. ' $43e0: 00 00 00 00 00 00 00 7e 7e 00 00 00 00 00 08 08 
  1263. ' $43f0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1264. ' $4400: 08 08 08 08 00 7e 7e 00 00 00 00 00 00 00 00 00 
  1265. ' $4410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1266. ' $4420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1267. ' $4430: 00 00 00 00 7e 7e 7e 7e 00 00 00 00 00 00 08 08 
  1268. ' $4440: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1269. ' $4450: 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  1270. ' $4460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1271. ' $4470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1272. ' $4480: 00 00 00 00 7e 7e 7e 7e 7e 00 00 00 00 00 08 08 
  1273. ' $4490: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1274. ' $44a0: 08 08 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1275. ' $44b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1276. ' $44c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1277. ' $44d0: 00 00 7e 00 00 ff ff ff ff 00 00 00 00 00 08 08 
  1278. ' $44e0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1279. ' $44f0: 7e 08 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  1280. ' $4500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1281. ' $4510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1282. ' $4520: 00 00 7e 7e 7e 7e 7e 00 08 00 00 00 00 00 08 08 
  1283. ' $4530: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1284. ' $4540: 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  1285. ' $4550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1286. ' $4560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1287. ' $4570: 00 00 00 7e 7e 7e 7e 7e 08 00 00 00 00 00 08 08 
  1288. ' $4580: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1289. ' $4590: 00 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  1290. ' $45a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1291. ' $45b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1292. ' $45c0: 00 7e 7e 7e 7e 00 00 7e 08 00 00 00 00 00 08 08 
  1293. ' $45d0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  1294. ' $45e0: 7e 7e 7e 00 00 7e 00 00 00 00 00 00 00 00 00 00 
  1295. ' $45f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1296. ' $4600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1297. ' $4610: 00 7e 7e 7e 7e 7e 7e 08 08 00 00 00 00 00 08 08 
  1298. ' $4620: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  1299. ' $4630: 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  1300. ' $4640: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1301. ' $4650: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1302. ' $4660: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1303. ' $4670: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1304. ' $4680: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1305. ' $4690: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1306. ' $46a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 
  1307. ' $46b0: 7e 7e 7e 00 00 08 08 08 08 00 00 00 00 00 08 08 
  1308. ' $46c0: 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 
  1309. ' $46d0: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1310. ' $46e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1311. ' $46f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1312. ' $4700: 7e 7e 7e 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  1313. ' $4710: 08 08 08 08 08 08 08 08 08 08 08 08 08 00 7e 7e 
  1314. ' $4720: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1315. ' $4730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1316. ' $4740: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  1317. ' $4750: 7e 00 00 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  1318. ' $4760: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 
  1319. ' $4770: 00 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1320. ' $4780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1321. ' $4790: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  1322. ' $47a0: 7e 7e 7e 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1323. ' $47b0: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 7e 
  1324. ' $47c0: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1325. ' $47d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1326. ' $47e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 ff ff 
  1327. ' $47f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1328. ' $4800: ff ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff 
  1329. ' $4810: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1330. ' $4820: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1331. ' $4830: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 
  1332. ' $4840: 00 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1333. ' $4850: 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 
  1334. ' $4860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1335. ' $4870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1336. ' $4880: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 
  1337. ' $4890: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1338. ' $48a0: 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 7e 7e 00 
  1339. ' $48b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1340. ' $48c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1341. ' $48d0: 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 00 00 
  1342. ' $48e0: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1343. ' $48f0: 08 08 08 08 08 08 08 08 7e 7e 7e 7e 00 00 7e 00 
  1344. ' $4900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1345. ' $4910: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1346. ' $4920: 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 7e 7e 
  1347. ' $4930: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1348. ' $4940: 08 08 08 08 08 08 08 08 7e 7e 7e 7e 7e 7e 00 00 
  1349. ' $4950: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1350. ' $4960: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1351. ' $4970: ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff ff 
  1352. ' $4980: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1353. ' $4990: ff ff ff ff ff ff ff ff 81 ff ff ff ff ff ff ff 
  1354. ' $49a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1355. ' $49b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1356. ' $49c0: 00 00 00 00 00 00 00 00 7e 7e 7e 7e 00 00 08 08 
  1357. ' $49d0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1358. ' $49e0: 08 08 08 08 08 08 7e 7e 7e 7e 00 00 00 00 00 00 
  1359. ' $49f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1360. ' $4a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1361. ' $4a10: 00 00 00 00 00 00 00 00 00 7e 7e 7e 7e 7e 08 08 
  1362. ' $4a20: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1363. ' $4a30: 08 08 08 08 08 08 00 7e 7e 7e 7e 7e 00 00 00 00 
  1364. ' $4a40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1365. ' $4a50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1366. ' $4a60: 00 00 00 00 00 00 7e 7e 7e 7e 7e 00 7e 7e 08 08 
  1367. ' $4a70: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1368. ' $4a80: 08 08 08 08 7e 7e 7e 7e 7e 00 7e 7e 00 00 00 00 
  1369. ' $4a90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1370. ' $4aa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1371. ' $4ab0: 00 00 00 00 00 00 7e 7e 7e 7e 7e 7e 08 08 08 08 
  1372. ' $4ac0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1373. ' $4ad0: 08 08 08 08 7e 7e 7e 7e 7e 7e 00 00 00 00 00 00 
  1374. ' $4ae0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1375. ' $4af0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1376. ' $4b00: ff ff ff ff ff ff 81 ff ff ff ff ff ff ff ff ff 
  1377. ' $4b10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1378. ' $4b20: ff ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff 
  1379. ' $4b30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1380. ' $4b40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1381. ' $4b50: 00 00 00 00 00 7e 7e 7e 7e 00 00 08 08 08 08 08 
  1382. ' $4b60: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1383. ' $4b70: 08 08 08 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1384. ' $4b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1385. ' $4b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1386. ' $4ba0: 00 00 00 00 00 7e 7e 7e 7e 7e 7e 08 08 08 08 08 
  1387. ' $4bb0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1388. ' $4bc0: 08 08 08 7e 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 
  1389. ' $4bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1390. ' $4be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1391. ' $4bf0: 00 00 00 7e 7e 7e 7e 00 00 7e 7e 08 08 08 08 08 
  1392. ' $4c00: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1393. ' $4c10: 08 7e 7e 7e 7e 00 00 7e 7e 00 00 00 00 00 00 00 
  1394. ' $4c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1395. ' $4c30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1396. ' $4c40: 00 00 00 7e 7e 7e 7e 7e 7e 08 08 08 08 08 08 08 
  1397. ' $4c50: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  1398. ' $4c60: 08 7e 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1399. ' $4c70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1400. ' $4c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1401. ' $4c90: ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff ff 
  1402. ' $4ca0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1403. ' $4cb0: ff 81 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1404. ' $4cc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1405. ' $4cd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1406. ' $4ce0: 00 7e 7e 7e 7e 00 00 08 08 08 08 08 08 08 08 08 
  1407. ' $4cf0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 7e 
  1408. ' $4d00: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1409. ' $4d10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1410. ' $4d20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1411. ' $4d30: 00 00 7e 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 
  1412. ' $4d40: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 00 
  1413. ' $4d50: 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  1414. ' $4d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1415. ' $4d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1416. ' $4d80: 7e 7e 7e 7e 00 7e 7e 08 08 08 08 08 08 08 08 08 
  1417. ' $4d90: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1418. ' $4da0: 7e 7e 00 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  1419. ' $4db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1420. ' $4dc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1421. ' $4dd0: 7e 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 
  1422. ' $4de0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1423. ' $4df0: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1424. ' $4e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1425. ' $4e10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1426. ' $4e20: ff ff 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 
  1427. ' $4e30: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 ff ff 
  1428. ' $4e40: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1429. ' $4e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1430. ' $4e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1431. ' $4e70: 7e 7e 00 00 08 08 08 08 08 08 08 08 08 08 08 08 
  1432. ' $4e80: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1433. ' $4e90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1434. ' $4ea0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1435. ' $4eb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1436. ' $4ec0: 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  1437. ' $4ed0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1438. ' $4ee0: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1439. ' $4ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1440. ' $4f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1441. ' $4f10: 00 00 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  1442. ' $4f20: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1443. ' $4f30: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1444. ' $4f40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1445. ' $4f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1446. ' $4f60: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1447. ' $4f70: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1448. ' $4f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1449. ' $4f90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1450. ' $4fa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1451. ' $4fb0: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1452. ' $4fc0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  1453. ' $4fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1454. ' $4fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1455. ' $4ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1456. ' $5000: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1457. ' $5010: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  1458. ' $5020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1459. ' $5030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1460. ' $5040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1461. ' $5050: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  1462. ' $5060: 5d 5d 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 55 55 
  1463. ' $5070: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1464. ' $5080: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1465. ' $5090: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1466. ' $50a0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1467. ' $50b0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1468. ' $50c0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1469. ' $50d0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1470. ' $50e0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1471. ' $50f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1472. ' $5100: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1473. ' $5110: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1474. ' $5120: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1475. ' $5130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1476. ' $5140: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1477. ' $5150: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1478. ' $5160: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1479. ' $5170: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1480. ' $5180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1481. ' $5190: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1482. ' $51a0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  1483. ' $51b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1484. ' $51c0: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  1485. ' $51d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1486. ' $51e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1487. ' $51f0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  1488. ' $5200: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1489. ' $5210: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  1490. ' $5220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1491. ' $5230: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1492. ' $5240: 18 18 18 18 18 18 7e 18 ff 00 00 00 00 00 18 18 
  1493. ' $5250: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1494. ' $5260: 18 18 18 18 7e 18 ff 00 00 00 00 00 00 00 00 00 
  1495. ' $5270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1496. ' $5280: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1497. ' $5290: 18 18 18 18 18 18 7e 7e 7e 00 00 00 00 00 18 18 
  1498. ' $52a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1499. ' $52b0: 18 18 18 18 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1500. ' $52c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1501. ' $52d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1502. ' $52e0: 18 18 18 18 18 18 00 7e 7e 00 00 00 00 00 18 18 
  1503. ' $52f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1504. ' $5300: 18 18 18 18 00 7e 7e 00 00 00 00 00 00 00 00 00 
  1505. ' $5310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1506. ' $5320: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1507. ' $5330: 18 18 18 18 7e 7e 7e 7e 00 00 00 00 00 00 18 18 
  1508. ' $5340: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1509. ' $5350: 18 18 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  1510. ' $5360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1511. ' $5370: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1512. ' $5380: 18 18 18 18 7e 7e 7e 7e 7e 00 00 00 00 00 18 18 
  1513. ' $5390: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1514. ' $53a0: 18 18 7e 7e 7e 7e 7e 00 00 00 00 00 00 00 00 00 
  1515. ' $53b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1516. ' $53c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1517. ' $53d0: 18 18 7e 18 00 ff ff ff ff 00 00 00 00 00 18 18 
  1518. ' $53e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1519. ' $53f0: 7e 18 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  1520. ' $5400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1521. ' $5410: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1522. ' $5420: 18 18 7e 7e 7e 7e 7e 00 18 00 00 00 00 00 18 18 
  1523. ' $5430: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1524. ' $5440: 7e 7e 7e 7e 7e 00 18 00 00 00 00 00 00 00 00 00 
  1525. ' $5450: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1526. ' $5460: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1527. ' $5470: 18 18 00 7e 7e 7e 7e 7e 18 00 00 00 00 00 18 18 
  1528. ' $5480: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1529. ' $5490: 00 7e 7e 7e 7e 7e 18 00 00 00 00 00 00 00 00 00 
  1530. ' $54a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1531. ' $54b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1532. ' $54c0: 18 7e 7e 7e 7e 00 00 7e 18 00 00 00 00 00 18 18 
  1533. ' $54d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  1534. ' $54e0: 7e 7e 7e 00 00 7e 18 00 00 00 00 00 00 00 00 00 
  1535. ' $54f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1536. ' $5500: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1537. ' $5510: 18 7e 7e 7e 7e 7e 7e 18 18 00 00 00 00 00 18 18 
  1538. ' $5520: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  1539. ' $5530: 7e 7e 7e 7e 7e 18 18 00 00 00 00 00 00 00 00 00 
  1540. ' $5540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1541. ' $5550: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1542. ' $5560: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1543. ' $5570: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1544. ' $5580: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1545. ' $5590: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1546. ' $55a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  1547. ' $55b0: 7e 7e 7e 00 00 18 18 18 18 00 00 00 00 00 18 18 
  1548. ' $55c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  1549. ' $55d0: 7e 00 00 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1550. ' $55e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1551. ' $55f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 
  1552. ' $5600: 7e 7e 7e 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  1553. ' $5610: 18 18 18 18 18 18 18 18 18 18 18 18 18 00 7e 7e 
  1554. ' $5620: 7e 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1555. ' $5630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1556. ' $5640: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  1557. ' $5650: 7e 00 00 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  1558. ' $5660: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 00 
  1559. ' $5670: 00 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1560. ' $5680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1561. ' $5690: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  1562. ' $56a0: 7e 7e 7e 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1563. ' $56b0: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 7e 
  1564. ' $56c0: 7e 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1565. ' $56d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1566. ' $56e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 ff ff 
  1567. ' $56f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1568. ' $5700: ff ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff 
  1569. ' $5710: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1570. ' $5720: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1571. ' $5730: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 
  1572. ' $5740: 00 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1573. ' $5750: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 00 18 
  1574. ' $5760: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1575. ' $5770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1576. ' $5780: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 
  1577. ' $5790: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1578. ' $57a0: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 7e 18 
  1579. ' $57b0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1580. ' $57c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1581. ' $57d0: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 00 00 
  1582. ' $57e0: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1583. ' $57f0: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 00 00 7e 18 
  1584. ' $5800: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1585. ' $5810: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1586. ' $5820: 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 7e 7e 7e 
  1587. ' $5830: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1588. ' $5840: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 7e 7e 18 18 
  1589. ' $5850: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1590. ' $5860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1591. ' $5870: ff ff ff ff ff ff ff ff ff ff 81 ff ff ff ff ff 
  1592. ' $5880: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1593. ' $5890: ff ff ff ff ff ff ff ff 81 ff ff ff ff ff ff ff 
  1594. ' $58a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1595. ' $58b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1596. ' $58c0: 18 18 18 18 18 18 18 18 7e 7e 7e 7e 00 00 18 18 
  1597. ' $58d0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1598. ' $58e0: 18 18 18 18 18 18 7e 7e 7e 7e 00 00 18 18 18 18 
  1599. ' $58f0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1600. ' $5900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1601. ' $5910: 18 18 18 18 18 18 18 18 00 7e 7e 7e 7e 7e 18 18 
  1602. ' $5920: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1603. ' $5930: 18 18 18 18 18 18 00 7e 7e 7e 7e 7e 18 18 18 18 
  1604. ' $5940: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1605. ' $5950: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1606. ' $5960: 18 18 18 18 18 18 7e 7e 7e 7e 7e 00 7e 7e 18 18 
  1607. ' $5970: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1608. ' $5980: 18 18 18 18 7e 7e 7e 7e 7e 00 7e 7e 18 18 18 18 
  1609. ' $5990: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1610. ' $59a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1611. ' $59b0: 18 18 18 18 18 18 7e 7e 7e 7e 7e 7e 18 18 18 18 
  1612. ' $59c0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1613. ' $59d0: 18 18 18 18 7e 7e 7e 7e 7e 7e 18 18 18 18 18 18 
  1614. ' $59e0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1615. ' $59f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1616. ' $5a00: ff ff ff ff ff ff 81 ff ff ff ff ff ff ff ff ff 
  1617. ' $5a10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1618. ' $5a20: ff ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff 
  1619. ' $5a30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1620. ' $5a40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1621. ' $5a50: 18 18 18 18 18 7e 7e 7e 7e 00 00 18 18 18 18 18 
  1622. ' $5a60: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1623. ' $5a70: 18 18 18 7e 7e 7e 7e 00 00 18 18 18 18 18 18 18 
  1624. ' $5a80: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1625. ' $5a90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1626. ' $5aa0: 18 18 18 18 18 7e 7e 7e 7e 7e 7e 18 18 18 18 18 
  1627. ' $5ab0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1628. ' $5ac0: 18 18 18 7e 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 
  1629. ' $5ad0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1630. ' $5ae0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1631. ' $5af0: 18 18 18 7e 7e 7e 7e 00 00 7e 7e 18 18 18 18 18 
  1632. ' $5b00: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1633. ' $5b10: 18 7e 7e 7e 7e 00 00 7e 7e 18 18 18 18 18 18 18 
  1634. ' $5b20: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1635. ' $5b30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1636. ' $5b40: 18 18 18 7e 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 
  1637. ' $5b50: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1638. ' $5b60: 18 7e 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  1639. ' $5b70: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1640. ' $5b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1641. ' $5b90: ff ff ff 81 ff ff ff ff ff ff ff ff ff ff ff ff 
  1642. ' $5ba0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1643. ' $5bb0: ff 81 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1644. ' $5bc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1645. ' $5bd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1646. ' $5be0: 18 7e 7e 7e 7e 00 00 18 18 18 18 18 18 18 18 18 
  1647. ' $5bf0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 7e 
  1648. ' $5c00: 7e 7e 7e 00 00 18 18 18 18 18 18 18 18 18 18 18 
  1649. ' $5c10: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1650. ' $5c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1651. ' $5c30: 18 00 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  1652. ' $5c40: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 00 
  1653. ' $5c50: 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1654. ' $5c60: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1655. ' $5c70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1656. ' $5c80: 7e 7e 7e 7e 00 7e 7e 18 18 18 18 18 18 18 18 18 
  1657. ' $5c90: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1658. ' $5ca0: 7e 7e 00 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1659. ' $5cb0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1660. ' $5cc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1661. ' $5cd0: 7e 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1662. ' $5ce0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1663. ' $5cf0: 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1664. ' $5d00: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1665. ' $5d10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1666. ' $5d20: ff ff 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1667. ' $5d30: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 ff ff 
  1668. ' $5d40: 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1669. ' $5d50: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1670. ' $5d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1671. ' $5d70: 7e 7e 00 00 18 18 18 18 18 18 18 18 18 18 18 18 
  1672. ' $5d80: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1673. ' $5d90: 00 00 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1674. ' $5da0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1675. ' $5db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1676. ' $5dc0: 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  1677. ' $5dd0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1678. ' $5de0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1679. ' $5df0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1680. ' $5e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1681. ' $5e10: 00 00 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  1682. ' $5e20: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 00 00 
  1683. ' $5e30: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1684. ' $5e40: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1685. ' $5e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1686. ' $5e60: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1687. ' $5e70: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1688. ' $5e80: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1689. ' $5e90: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1690. ' $5ea0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1691. ' $5eb0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1692. ' $5ec0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1693. ' $5ed0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1694. ' $5ee0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1695. ' $5ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1696. ' $5f00: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1697. ' $5f10: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1698. ' $5f20: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1699. ' $5f30: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1700. ' $5f40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1701. ' $5f50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1702. ' $5f60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1703. ' $5f70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1704. ' $5f80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1705. ' $5f90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1706. ' $5fa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1707. ' $5fb0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1708. ' $5fc0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1709. ' $5fd0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1710. ' $5fe0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1711. ' $5ff0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1712. ' $6000: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1713. ' $6010: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1714. ' $6020: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1715. ' $6030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1716. ' $6040: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1717. ' $6050: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1718. ' $6060: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1719. ' $6070: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1720. ' $6080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 c0 
  1721. ' $6090: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1722. ' $60a0: 18 18 18 18 18 18 18 18 7e 00 00 00 00 00 18 18 
  1723. ' $60b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1724. ' $60c0: 18 18 18 18 18 18 7e 00 00 00 00 00 00 00 00 00 
  1725. ' $60d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 20 
  1726. ' $60e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1727. ' $60f0: 18 18 18 18 18 18 18 18 42 00 00 00 00 00 18 18 
  1728. ' $6100: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1729. ' $6110: 18 18 18 18 18 18 42 00 00 00 00 00 00 00 00 00 
  1730. ' $6120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 20 
  1731. ' $6130: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1732. ' $6140: 18 18 18 18 18 18 7e 18 ff 00 00 00 00 00 18 18 
  1733. ' $6150: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1734. ' $6160: 18 18 18 18 7e 18 ff 00 00 00 00 00 00 00 00 00 
  1735. ' $6170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 90 
  1736. ' $6180: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1737. ' $6190: 18 18 18 18 18 18 7e 7e 42 00 00 00 00 00 18 18 
  1738. ' $61a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1739. ' $61b0: 18 18 18 18 7e 7e 42 00 00 00 00 00 00 00 00 00 
  1740. ' $61c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 90 
  1741. ' $61d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1742. ' $61e0: 18 18 18 18 18 18 00 42 7e 00 00 00 00 00 18 18 
  1743. ' $61f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1744. ' $6200: 18 18 18 18 00 42 7e 00 00 00 00 00 00 00 00 00 
  1745. ' $6210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 58 
  1746. ' $6220: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1747. ' $6230: 18 18 18 18 7e 7e 7e 42 00 00 00 00 00 00 18 18 
  1748. ' $6240: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1749. ' $6250: 18 18 7e 7e 7e 42 00 00 00 00 00 00 00 00 00 00 
  1750. ' $6260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 48 
  1751. ' $6270: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1752. ' $6280: 18 18 18 18 7e 42 42 42 7e 00 00 00 00 00 18 18 
  1753. ' $6290: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1754. ' $62a0: 18 18 7e 42 42 42 7e 00 00 00 00 00 00 00 00 00 
  1755. ' $62b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 68 
  1756. ' $62c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1757. ' $62d0: 18 18 7e 18 00 ff ff ff ff 00 00 00 00 00 18 18 
  1758. ' $62e0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1759. ' $62f0: 7e 18 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  1760. ' $6300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 28 
  1761. ' $6310: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1762. ' $6320: 18 18 7e 7e 7e 42 42 00 18 00 00 00 00 00 18 18 
  1763. ' $6330: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1764. ' $6340: 7e 7e 7e 42 42 00 18 00 00 00 00 00 00 00 00 00 
  1765. ' $6350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 28 
  1766. ' $6360: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1767. ' $6370: 18 18 00 42 42 7e 7e 7e 18 00 00 00 00 00 18 18 
  1768. ' $6380: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1769. ' $6390: 00 42 42 7e 7e 7e 18 00 00 00 00 00 00 00 00 00 
  1770. ' $63a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 28 
  1771. ' $63b0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1772. ' $63c0: 18 7e 7e 42 42 00 00 7e 18 00 00 00 00 00 18 18 
  1773. ' $63d0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  1774. ' $63e0: 7e 42 42 00 00 7e 18 00 00 00 00 00 00 00 00 00 
  1775. ' $63f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 28 
  1776. ' $6400: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1777. ' $6410: 18 42 42 42 42 7e 7e 18 18 00 00 00 00 00 18 18 
  1778. ' $6420: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 42 
  1779. ' $6430: 42 42 42 7e 7e 18 18 00 00 00 00 00 00 00 00 00 
  1780. ' $6440: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 28 
  1781. ' $6450: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1782. ' $6460: ff c3 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1783. ' $6470: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff c3 
  1784. ' $6480: c3 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1785. ' $6490: ff ff ff ff ff ff ff ff ff ff ff ff ff fc 28 28 
  1786. ' $64a0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 
  1787. ' $64b0: 7e 42 42 00 00 18 18 18 18 00 00 00 00 00 18 18 
  1788. ' $64c0: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 42 
  1789. ' $64d0: 42 00 00 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1790. ' $64e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 28 
  1791. ' $64f0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 
  1792. ' $6500: 42 7e 7e 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  1793. ' $6510: 18 18 18 18 18 18 18 18 18 18 18 18 18 00 42 7e 
  1794. ' $6520: 7e 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1795. ' $6530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2c 28 
  1796. ' $6540: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 
  1797. ' $6550: 42 00 00 7e 7e 18 18 18 18 00 00 00 00 00 18 18 
  1798. ' $6560: 18 18 18 18 18 18 18 18 18 18 18 7e 7e 7e 42 00 
  1799. ' $6570: 00 7e 7e 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1800. ' $6580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 28 
  1801. ' $6590: 18 18 18 18 18 18 18 18 18 18 18 18 18 7e 42 42 
  1802. ' $65a0: 42 7e 7e 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1803. ' $65b0: 18 18 18 18 18 18 18 18 18 18 18 7e 42 42 42 7e 
  1804. ' $65c0: 7e 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1805. ' $65d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 30 
  1806. ' $65e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 
  1807. ' $65f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1808. ' $6600: ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 ff ff 
  1809. ' $6610: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1810. ' $6620: ff ff ff ff ff ff ff ff ff ff ff ff ff fc 12 20 
  1811. ' $6630: 18 18 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 
  1812. ' $6640: 00 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1813. ' $6650: 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 00 18 
  1814. ' $6660: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1815. ' $6670: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 c0 
  1816. ' $6680: 18 18 18 18 18 18 18 18 18 18 18 18 42 42 7e 7e 
  1817. ' $6690: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1818. ' $66a0: 18 18 18 18 18 18 18 18 18 18 42 42 7e 7e 7e 18 
  1819. ' $66b0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1820. ' $66c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 80 
  1821. ' $66d0: 18 18 18 18 18 18 18 18 18 18 7e 7e 42 42 00 00 
  1822. ' $66e0: 7e 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1823. ' $66f0: 18 18 18 18 18 18 18 18 7e 7e 42 42 00 00 7e 18 
  1824. ' $6700: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1825. ' $6710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0b 00 
  1826. ' $6720: 18 18 18 18 18 18 18 18 18 18 7e 42 42 42 7e 7e 
  1827. ' $6730: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1828. ' $6740: 18 18 18 18 18 18 18 18 7e 42 42 42 7e 7e 18 18 
  1829. ' $6750: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1830. ' $6760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 
  1831. ' $6770: ff ff ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff 
  1832. ' $6780: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1833. ' $6790: ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff ff ff 
  1834. ' $67a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1835. ' $67b0: ff ff ff ff ff ff ff ff ff ff ff ff ff fc 06 80 
  1836. ' $67c0: 18 18 18 18 18 18 18 18 7e 7e 7e 42 00 00 18 18 
  1837. ' $67d0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1838. ' $67e0: 18 18 18 18 18 18 7e 7e 7e 42 00 00 18 18 18 18 
  1839. ' $67f0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1840. ' $6800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 80 
  1841. ' $6810: 18 18 18 18 18 18 18 18 00 42 42 7e 7e 7e 18 18 
  1842. ' $6820: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1843. ' $6830: 18 18 18 18 18 18 00 42 42 7e 7e 7e 18 18 18 18 
  1844. ' $6840: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1845. ' $6850: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 80 
  1846. ' $6860: 18 18 18 18 18 18 7e 7e 7e 42 42 00 7e 7e 18 18 
  1847. ' $6870: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1848. ' $6880: 18 18 18 18 7e 7e 7e 42 42 00 7e 7e 18 18 18 18 
  1849. ' $6890: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1850. ' $68a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3b f8 
  1851. ' $68b0: 18 18 18 18 18 18 7e 42 42 42 42 7e 18 18 18 18 
  1852. ' $68c0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1853. ' $68d0: 18 18 18 18 7e 42 42 42 42 7e 18 18 18 18 18 18 
  1854. ' $68e0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1855. ' $68f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 88 
  1856. ' $6900: ff ff ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff 
  1857. ' $6910: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1858. ' $6920: ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff ff ff 
  1859. ' $6930: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1860. ' $6940: ff ff ff ff ff ff ff ff ff ff ff ff ff fc 3f e8 
  1861. ' $6950: 18 18 18 18 18 7e 7e 42 42 00 00 18 18 18 18 18 
  1862. ' $6960: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1863. ' $6970: 18 18 18 7e 7e 42 42 00 00 18 18 18 18 18 18 18 
  1864. ' $6980: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1865. ' $6990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 68 
  1866. ' $69a0: 18 18 18 18 18 42 42 7e 7e 7e 7e 18 18 18 18 18 
  1867. ' $69b0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1868. ' $69c0: 18 18 18 42 42 7e 7e 7e 7e 18 18 18 18 18 18 18 
  1869. ' $69d0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1870. ' $69e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 68 
  1871. ' $69f0: 18 18 18 7e 7e 42 42 00 00 7e 7e 18 18 18 18 18 
  1872. ' $6a00: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1873. ' $6a10: 18 7e 7e 42 42 00 00 7e 7e 18 18 18 18 18 18 18 
  1874. ' $6a20: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1875. ' $6a30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 49 28 
  1876. ' $6a40: 18 18 18 7e 42 42 42 7e 7e 18 18 18 18 18 18 18 
  1877. ' $6a50: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1878. ' $6a60: 18 7e 42 42 42 7e 7e 18 18 18 18 18 18 18 18 18 
  1879. ' $6a70: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1880. ' $6a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4f f0 
  1881. ' $6a90: ff ff ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff 
  1882. ' $6aa0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1883. ' $6ab0: ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1884. ' $6ac0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  1885. ' $6ad0: ff ff ff ff ff ff ff ff ff ff ff ff ff fc 20 b0 
  1886. ' $6ae0: 18 7e 7e 7e 42 00 00 18 18 18 18 18 18 18 18 18 
  1887. ' $6af0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 7e 
  1888. ' $6b00: 7e 7e 42 00 00 18 18 18 18 18 18 18 18 18 18 18 
  1889. ' $6b10: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1890. ' $6b20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1f d0 
  1891. ' $6b30: 18 00 42 42 7e 7e 7e 18 18 18 18 18 18 18 18 18 
  1892. ' $6b40: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 00 
  1893. ' $6b50: 42 42 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1894. ' $6b60: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1895. ' $6b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 
  1896. ' $6b80: 7e 7e 42 42 00 7e 7e 18 18 18 18 18 18 18 18 18 
  1897. ' $6b90: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1898. ' $6ba0: 42 42 00 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1899. ' $6bb0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1900. ' $6bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 d0 
  1901. ' $6bd0: 42 42 42 42 7e 18 18 18 18 18 18 18 18 18 18 18 
  1902. ' $6be0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 42 42 
  1903. ' $6bf0: 42 42 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1904. ' $6c00: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1905. ' $6c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 d0 
  1906. ' $6c20: ff ff 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 
  1907. ' $6c30: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 ff ff 
  1908. ' $6c40: 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1909. ' $6c50: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1910. ' $6c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 50 
  1911. ' $6c70: 42 42 00 00 18 18 18 18 18 18 18 18 18 18 18 18 
  1912. ' $6c80: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 42 42 
  1913. ' $6c90: 00 00 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1914. ' $6ca0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1915. ' $6cb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 50 
  1916. ' $6cc0: 7e 7e 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  1917. ' $6cd0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1918. ' $6ce0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1919. ' $6cf0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1920. ' $6d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 50 
  1921. ' $6d10: 00 00 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 
  1922. ' $6d20: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 00 00 
  1923. ' $6d30: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1924. ' $6d40: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1925. ' $6d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 f0 
  1926. ' $6d60: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1927. ' $6d70: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1928. ' $6d80: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1929. ' $6d90: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1930. ' $6da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 40 
  1931. ' $6db0: 7e 7e 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1932. ' $6dc0: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 7e 7e 
  1933. ' $6dd0: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1934. ' $6de0: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1935. ' $6df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 c0 
  1936. ' $6e00: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1937. ' $6e10: 18 18 18 18 18 18 18 18 18 00 00 00 00 00 18 18 
  1938. ' $6e20: 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 
  1939. ' $6e30: 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 00 
  1940. ' $6e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1941. ' $6e50: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  1942. ' $6e60: 5d 5d 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 5d 5d 
  1943. ' $6e70: 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 5d 
  1944. ' $6e80: 5d 5d 5d 5d 5d 5d 5d 55 55 55 55 55 55 55 55 55 
  1945. ' $6e90: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1946. ' $6ea0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1947. ' $6eb0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1948. ' $6ec0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1949. ' $6ed0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1950. ' $6ee0: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 
  1951. ' $6ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1952. ' $6f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  1953. ' $6f10: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1954. ' $6f20: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  1955. ' $6f30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1956. ' $6f40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1957. ' $6f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 
  1958. ' $6f60: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1959. ' $6f70: 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 
  1960. ' $6f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1961. ' $6f90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1962. ' $6fa0: 00 00 00 00 00 00 00 00 7e 00 00 00 00 00 08 08 
  1963. ' $6fb0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1964. ' $6fc0: 08 08 08 08 08 08 7e 00 00 00 00 00 00 00 00 00 
  1965. ' $6fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1966. ' $6fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1967. ' $6ff0: 00 00 00 00 00 00 00 00 42 00 00 00 00 00 08 08 
  1968. ' $7000: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1969. ' $7010: 08 08 08 08 08 08 42 00 00 00 00 00 00 00 00 00 
  1970. ' $7020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1971. ' $7030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1972. ' $7040: 00 00 00 00 00 00 7e 00 ff 00 00 00 00 00 08 08 
  1973. ' $7050: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1974. ' $7060: 08 08 08 08 7e 08 ff 00 00 00 00 00 00 00 00 00 
  1975. ' $7070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1976. ' $7080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1977. ' $7090: 00 00 00 00 00 00 7e 7e 42 00 00 00 00 00 08 08 
  1978. ' $70a0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1979. ' $70b0: 08 08 08 08 7e 7e 42 00 00 00 00 00 00 00 00 00 
  1980. ' $70c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1981. ' $70d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1982. ' $70e0: 00 00 00 00 00 00 00 42 7e 00 00 00 00 00 08 08 
  1983. ' $70f0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1984. ' $7100: 08 08 08 08 00 42 7e 00 00 00 00 00 00 00 00 00 
  1985. ' $7110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1986. ' $7120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1987. ' $7130: 00 00 00 00 7e 7e 7e 42 00 00 00 00 00 00 08 08 
  1988. ' $7140: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1989. ' $7150: 08 08 7e 7e 7e 42 00 00 00 00 00 00 00 00 00 00 
  1990. ' $7160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1991. ' $7170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1992. ' $7180: 00 00 00 00 7e 42 42 42 7e 00 00 00 00 00 08 08 
  1993. ' $7190: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1994. ' $71a0: 08 08 7e 42 42 42 7e 00 00 00 00 00 00 00 00 00 
  1995. ' $71b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1996. ' $71c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  1997. ' $71d0: 00 00 7e 00 00 ff ff ff ff 00 00 00 00 00 08 08 
  1998. ' $71e0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  1999. ' $71f0: 7e 08 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 
  2000. ' $7200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2001. ' $7210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2002. ' $7220: 00 00 7e 7e 7e 42 42 00 08 00 00 00 00 00 08 08 
  2003. ' $7230: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  2004. ' $7240: 7e 7e 7e 42 42 00 00 00 00 00 00 00 00 00 00 00 
  2005. ' $7250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2006. ' $7260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2007. ' $7270: 00 00 00 42 42 7e 7e 7e 08 00 00 00 00 00 08 08 
  2008. ' $7280: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  2009. ' $7290: 00 42 42 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 
  2010. ' $72a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2011. ' $72b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2012. ' $72c0: 00 7e 7e 42 42 00 00 7e 08 00 00 00 00 00 08 08 
  2013. ' $72d0: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 
  2014. ' $72e0: 7e 42 42 00 00 7e 00 00 00 00 00 00 00 00 00 00 
  2015. ' $72f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2016. ' $7300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2017. ' $7310: 00 42 42 42 42 7e 7e 08 08 00 00 00 00 00 08 08 
  2018. ' $7320: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 42 
  2019. ' $7330: 42 42 42 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  2020. ' $7340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2021. ' $7350: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2022. ' $7360: ff c3 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2023. ' $7370: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff c3 
  2024. ' $7380: c3 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2025. ' $7390: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2026. ' $73a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 
  2027. ' $73b0: 7e 42 42 00 00 08 08 08 08 00 00 00 00 00 08 08 
  2028. ' $73c0: 08 08 08 08 08 08 08 08 08 08 08 08 08 7e 7e 42 
  2029. ' $73d0: 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2030. ' $73e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2031. ' $73f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2032. ' $7400: 42 7e 7e 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  2033. ' $7410: 08 08 08 08 08 08 08 08 08 08 08 08 08 00 42 7e 
  2034. ' $7420: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2035. ' $7430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2036. ' $7440: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 7e 
  2037. ' $7450: 42 00 00 7e 7e 08 08 08 08 00 00 00 00 00 08 08 
  2038. ' $7460: 08 08 08 08 08 08 08 08 08 08 08 7e 7e 7e 42 00 
  2039. ' $7470: 00 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2040. ' $7480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2041. ' $7490: 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 42 42 
  2042. ' $74a0: 42 7e 7e 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2043. ' $74b0: 08 08 08 08 08 08 08 08 08 08 08 7e 42 42 42 7e 
  2044. ' $74c0: 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2045. ' $74d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2046. ' $74e0: ff ff ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 
  2047. ' $74f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2048. ' $7500: ff ff ff ff ff ff ff ff ff ff ff 81 c3 c3 ff ff 
  2049. ' $7510: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2050. ' $7520: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2051. ' $7530: 00 00 00 00 00 00 00 00 00 00 00 00 7e 7e 42 42 
  2052. ' $7540: 00 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2053. ' $7550: 08 08 08 08 08 08 08 08 08 08 7e 7e 42 42 00 00 
  2054. ' $7560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2055. ' $7570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2056. ' $7580: 00 00 00 00 00 00 00 00 00 00 00 00 42 42 7e 7e 
  2057. ' $7590: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2058. ' $75a0: 08 08 08 08 08 08 08 08 08 08 42 42 7e 7e 7e 00 
  2059. ' $75b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2060. ' $75c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2061. ' $75d0: 00 00 00 00 00 00 00 00 00 00 7e 7e 42 42 00 00 
  2062. ' $75e0: 7e 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2063. ' $75f0: 08 08 08 08 08 08 08 08 7e 7e 42 42 00 00 7e 00 
  2064. ' $7600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2065. ' $7610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2066. ' $7620: 00 00 00 00 00 00 00 00 00 00 7e 42 42 42 7e 7e 
  2067. ' $7630: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2068. ' $7640: 08 08 08 08 08 08 08 08 7e 42 42 42 7e 7e 00 00 
  2069. ' $7650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2070. ' $7660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2071. ' $7670: ff ff ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff 
  2072. ' $7680: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2073. ' $7690: ff ff ff ff ff ff ff ff 81 c3 ff ff ff ff ff ff 
  2074. ' $76a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2075. ' $76b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2076. ' $76c0: 00 00 00 00 00 00 00 00 7e 7e 7e 42 00 00 08 08 
  2077. ' $76d0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2078. ' $76e0: 08 08 08 08 08 08 7e 7e 7e 42 00 00 00 00 00 00 
  2079. ' $76f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2080. ' $7700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2081. ' $7710: 00 00 00 00 00 00 00 00 00 42 42 7e 7e 7e 08 08 
  2082. ' $7720: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2083. ' $7730: 08 08 08 08 08 08 00 42 42 7e 7e 7e 00 00 00 00 
  2084. ' $7740: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2085. ' $7750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2086. ' $7760: 00 00 00 00 00 00 7e 7e 7e 42 42 00 7e 7e 08 08 
  2087. ' $7770: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2088. ' $7780: 08 08 08 08 7e 7e 7e 42 42 00 7e 7e 00 00 00 00 
  2089. ' $7790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2090. ' $77a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2091. ' $77b0: 00 00 00 00 00 00 7e 42 42 42 42 7e 08 08 08 08 
  2092. ' $77c0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2093. ' $77d0: 08 08 08 08 7e 42 42 42 42 7e 00 00 00 00 00 00 
  2094. ' $77e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2095. ' $77f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2096. ' $7800: ff ff ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff 
  2097. ' $7810: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2098. ' $7820: ff ff ff ff 81 c3 c3 ff ff ff ff ff ff ff ff ff 
  2099. ' $7830: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2100. ' $7840: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2101. ' $7850: 00 00 00 00 00 7e 7e 42 42 00 00 08 08 08 08 08 
  2102. ' $7860: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2103. ' $7870: 08 08 08 7e 7e 42 42 00 00 00 00 00 00 00 00 00 
  2104. ' $7880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2105. ' $7890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2106. ' $78a0: 00 00 00 00 00 42 42 7e 7e 7e 7e 08 08 08 08 08 
  2107. ' $78b0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2108. ' $78c0: 08 08 08 42 42 7e 7e 7e 7e 00 00 00 00 00 00 00 
  2109. ' $78d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2110. ' $78e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2111. ' $78f0: 00 00 00 7e 7e 42 42 00 00 7e 7e 08 08 08 08 08 
  2112. ' $7900: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2113. ' $7910: 08 7e 7e 42 42 00 00 7e 7e 00 00 00 00 00 00 00 
  2114. ' $7920: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2115. ' $7930: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2116. ' $7940: 00 00 00 7e 42 42 42 7e 7e 08 08 08 08 08 08 08 
  2117. ' $7950: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 08 
  2118. ' $7960: 08 7e 42 42 42 7e 7e 00 00 00 00 00 00 00 00 00 
  2119. ' $7970: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2120. ' $7980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2121. ' $7990: ff ff ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff 
  2122. ' $79a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2123. ' $79b0: ff 81 c3 ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2124. ' $79c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2125. ' $79d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
  2126. ' $79e0: 00 7e 7e 7e 42 00 00 08 08 08 08 08 08 08 08 08 
  2127. ' $79f0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 7e 
  2128. ' $7a00: 7e 7e 42 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2129. ' $7a10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2130. ' $7a20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2131. ' $7a30: 00 00 42 42 7e 7e 7e 08 08 08 08 08 08 08 08 08 
  2132. ' $7a40: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 08 00 
  2133. ' $7a50: 42 42 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  2134. ' $7a60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2135. ' $7a70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2136. ' $7a80: 7e 7e 42 42 00 7e 7e 08 08 08 08 08 08 08 08 08 
  2137. ' $7a90: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  2138. ' $7aa0: 42 42 00 7e 7e 00 00 00 00 00 00 00 00 00 00 00 
  2139. ' $7ab0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2140. ' $7ac0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2141. ' $7ad0: 42 42 42 42 7e 08 08 08 08 08 08 08 08 08 08 08 
  2142. ' $7ae0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 42 42 
  2143. ' $7af0: 42 42 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2144. ' $7b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2145. ' $7b10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2146. ' $7b20: ff ff 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 
  2147. ' $7b30: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 ff ff 
  2148. ' $7b40: 7e 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2149. ' $7b50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2150. ' $7b60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2151. ' $7b70: 42 42 00 00 08 08 08 08 08 08 08 08 08 08 08 08 
  2152. ' $7b80: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 42 42 
  2153. ' $7b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2154. ' $7ba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2155. ' $7bb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2156. ' $7bc0: 7e 7e 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  2157. ' $7bd0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  2158. ' $7be0: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2159. ' $7bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2160. ' $7c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2161. ' $7c10: 00 00 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 
  2162. ' $7c20: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 
  2163. ' $7c30: 7e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2164. ' $7c40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2165. ' $7c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2166. ' $7c60: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  2167. ' $7c70: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  2168. ' $7c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2169. ' $7c90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2170. ' $7ca0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2171. ' $7cb0: 7e 7e 08 08 08 08 08 08 08 08 08 08 08 08 08 08 
  2172. ' $7cc0: 08 08 08 08 08 08 08 08 08 00 00 00 00 00 7e 7e 
  2173. ' $7cd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2174. ' $7ce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2175. ' $7cf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  2176. ' 32000  Bytes.
  2177.   INLINE a1%,32000
  2178.   LET a1$=""                                    ! Variable erst mal erzeugen
  2179.   LPOKE *a1$,a1%                                ! Var.adr. in den Desktriptor
  2180.   DPOKE *a1$+4,8332                             ! Var.länge in den "
  2181.   ' ............................................................................
  2182.   SPUT a1$                                      ! Bildschirm ausgeben
  2183.   ' ----------------------------------------------------------------------------
  2184.   ' |1:         In dem Inline-Befehl ist nun der ganze Bildschirm drin, wie er
  2185.   '             normalerweise nach der
  2186.   '             PROCEDURE 0_grafische_vorbereitungen_ohne_inline aussieht.
  2187.   '             In der Prozedur, in der wir uns jetzt befinden, wird der Bild-
  2188.   '             schirm aus der Inline-Zeile herausgenommen und ausgegeben, so
  2189.   '             daß dann nur noch fotografiert, nix mehr gezeichnet werden muß,
  2190.   '             außer den Notenlinien in '1_workscreen_notenlinien_zeichnen'.
  2191.   '             Hinter dem Inline-Befehl ist kein Remark möglich !
  2192.   '             Folgende Befehle müßten zur Konstruktion eines Inline-Bildes
  2193.   '             in der Prozedur: '0_grafische_vorbereitungen_ohne_inline'
  2194.   '             stehen.
  2195.   '             Diese Befehle müssen zur Konstruktion eines Inline-Bildes ein-
  2196.   '             malig ausgeführt werden.
  2197.   '             Sie müssen genau vor den Fotografier-Prozeduren stehen.
  2198.   '             Danach setzt man den Cursor auf die Inline-Zeile,
  2199.   '             drückt die Help-Taste und läd das Bild BLD.INL in den Inline-
  2200.   '             Befehl hinein.
  2201.   '
  2202.   ' SGET a$                                       !
  2203.   ' OPEN "O",#1,"BLD.INL"                         !
  2204.   ' PRINT #1,a$                                   !
  2205.   ' CLOSE #1                                      !
  2206.   ' ----------------------------------------------------------------------------
  2207. RETURN
  2208. ' ..............................................................................
  2209. > PROCEDURE 0_grafische_vorbereitungen_ohne_inline        ! Diese Procs können
  2210.   ' ----------------------------------------------------------------------------
  2211.   @1_workscreen_notenlinien_zeichnen            !
  2212.   @1_klaviatur_zeichnen                         !
  2213.   @1_notenschluessel_zeichnen                   !
  2214.   @1_notenbilder_zeichnen                       ! evtl.Speichrbefehle zw.dieser
  2215.   '                                             !
  2216.   @1_klaviatur_fotografieren                    ! und dieser Zeile !
  2217.   @1_notenschluessel_fotografieren              !
  2218.   @1_notenbilder_fotografieren                  !
  2219.   @1_workscreen_notenlinien_zeichnen            ! nicht fotografiert weg.Speichr
  2220.   @1_workscreen_menue                           !
  2221.   @1_cursor_setzen                              !
  2222.   DEFMOUSE 0                                    ! Maus als Pfeil (nicht Biene)
  2223.   ' ----------------------------------------------------------------------------
  2224.   '             Diese Befehle müssen zur Konstruktion eines Inline-Bildes ein-
  2225.   '             malig ausgeführt werden.
  2226.   '             Sie müssen genau vor den Fotografier-Prozeduren stehen.
  2227.   '             Danach setzt man den Cursor auf die Inline-Zeile,
  2228.   '             drückt die Help-Taste und läd das Bild BLD.INL in den Inline-
  2229.   '             Befehl hinein.
  2230.   ' SGET a$                                     !
  2231.   ' OPEN "O",#1,"BLD.INL"                       !
  2232.   ' PRINT #1,a$                                 !
  2233.   ' CLOSE #1                                    !
  2234.   ' END                                         !
  2235.   ' ----------------------------------------------------------------------------
  2236. RETURN
  2237. > PROCEDURE 1_klaviatur_zeichnen                          ! weg bei Compilervers
  2238.   ' ----------------------------------------------------------------------------
  2239.   LOCAL ntb|                                    ! Notentastenbreite
  2240.   LOCAL ptb|                                    ! Pausentastenbreite
  2241.   LOCAL i|                                      ! Tastenzähler
  2242.   LOCAL x1%                                     ! links
  2243.   LOCAL y1%                                     ! oben
  2244.   LOCAL x2%                                     ! rechts
  2245.   LOCAL y2%                                     ! unten |1
  2246.   ' ............................................................................
  2247.   LET ntb|=25                                   ! Notentastenbreite
  2248.   LET ptb|=20                                   ! Pausentastenbreite
  2249.   LET y1%=0                                     ! oben
  2250.   LET y2%=15                                    ! unten=Menühöhe-1
  2251.   ' ............................................................................
  2252.   FOR i|=1 TO 24+1                              ! Alle Notentasten durch
  2253.     LET x1%=ptb|+(i|-1)*ntb|                    ! links
  2254.     LET x2%=ptb|+i|*ntb|                        ! rechts
  2255.     LINE x1%,y1%,x1%,y2%                        ! Tastenbegrenzung links
  2256.     '                                           ! F schwarze Taste:
  2257.     SELECT i|                                   ! Betrachte i|
  2258.     CASE 2,4,7,9,11,14,16,19,21,23              ! f schwarze Taste
  2259.       PBOX x1%,y1%,x2%,y2%                      ! schwarze Taste malen
  2260.     ENDSELECT                                   ! EF schwarze Taste
  2261.   NEXT i|                                       ! nächste Notentaste
  2262.   ' ............................................................................
  2263.   BOUNDARY 0                                    ! Rand ausschalten
  2264.   DEFFILL 1,2,4                                 ! Muster für Pausentaste
  2265.   PBOX 0,y1%,ptb|-1,y2%                         ! Pausentaste links
  2266.   DEFFILL 1,2,8                                 ! Muster wieder schwarz
  2267.   BOUNDARY 1                                    ! Rand wieder einschalten
  2268.   ' ----------------------------------------------------------------------------
  2269.   ' |1:         Achtung ! wenn y2| geändert wird, dann auch in der
  2270.   '             PROCEDURE 1_klaviatur_fotografieren
  2271.   ' ----------------------------------------------------------------------------
  2272. RETURN
  2273. > PROCEDURE 1_notenschluessel_zeichnen                    ! falls Inline exist.
  2274.   ' ----------------------------------------------------------------------------
  2275.   LOCAL x1%,y1%,x2%,y2%                         ! Koordinaten für Zeichnung
  2276.   LOCAL x%,y%                                   ! Koord. für GET
  2277.   LOCAL schatten$                               !
  2278.   ' ............................................................................
  2279.   LET x%=gx%(1,319)                             ! Erst mal Hintergrund löschen:
  2280.   LET y%=gy%(1,319)                             !
  2281.   DEFFILL 0                                     ! Gebundenzeichen: hohler Kopf
  2282.   PBOX x%-2,y%,x%+15,y%+45                      !
  2283.   DEFFILL 1                                     ! wieder normales Füllmuster
  2284.   ' ............................................................................
  2285.   RESTORE rekonstruktionsdaten                  !
  2286.   DO                                            !
  2287.     READ x1%,y1%,x2%,y2%                        !
  2288.     EXIT IF x1%=-1                              !
  2289.     LINE x1%,y1%+1,x2%,y2%+1                    !
  2290.   LOOP                                          !
  2291.   GET x%,y%,x%+15,y%+43,schatten$               ! Notenschlüssel fotografieren|1
  2292.   PUT x%-2,y%+2,schatten$,7                     ! Schatten für Notenschl.
  2293.   ' ----------------------------------------------------------------------------
  2294.   ' |1:         Das ist nicht die entgültige Fotografie, denn sie wird hier nur
  2295.   '             für den Schatten benutzt.
  2296.   ' ----------------------------------------------------------------------------
  2297. RETURN
  2298. > PROCEDURE 1_notenbilder_zeichnen                        !           "
  2299.   ' ----------------------------------------------------------------------------
  2300.   @2_pause_zeichnen                             ! Pausenzeichen
  2301.   FOR i|=1 TO 25                                ! Noten von 2 Oktaven durch
  2302.     @2_note_zeichnen(1,0*80+i|,i|,0,0,0)        ! ungeb.,  ob.kl., kein Tktstr.
  2303.     @2_note_zeichnen(2,0*80+i|,i|,0,0,1)        ! ungeb.,  ob.kl.,      Tktstr.
  2304.     @2_note_zeichnen(1,1*80+i|,i|,1,0,1)        !   geb.,  ob.kl.,      Tktstr.
  2305.     @2_note_zeichnen(2,1*80+i|,i|,1,0,0)        !   geb.,  ob.kl., kein Tktstr.
  2306.     @2_note_zeichnen(1,2*80+i|,i|,0,1,0)        ! ungeb., unt.kl., kein Tktstr.
  2307.     @2_note_zeichnen(2,2*80+i|,i|,0,1,1)        ! ungeb., unt.kl.,      Tktstr.
  2308.     @2_note_zeichnen(1,3*80+i|,i|,1,1,1)        !   geb., unt.kl.,      Tktstr.
  2309.     @2_note_zeichnen(2,3*80+i|,i|,1,1,0)        !   geb., unt.kl., kein Tktstr.
  2310.   NEXT i|                                       ! nächste Note
  2311.   ' ----------------------------------------------------------------------------
  2312. RETURN
  2313. > PROCEDURE 2_pause_zeichnen                              !           "
  2314.   ' ----------------------------------------------------------------------------
  2315.   LOCAL x%                                      ! x-Startposition links
  2316.   LOCAL y%                                      ! y-Startposition oben
  2317.   ' ............................................................................
  2318.   LET x%=gx%(1,79)                              ! x-Startposition links
  2319.   LET y%=gy%(1,79)                              ! y-Startposition oben
  2320.   ' ............................................................................
  2321.   @3_pausenzeichen(gyan|(17),gyan|(5),x%,y%)    ! Pausennote malen |1
  2322.   ' ............................................................................
  2323.   LET x%=gx%(1,76)                              ! x-Startposition links
  2324.   LET y%=gy%(1,76)                              ! y-Startposition oben
  2325.   ' ............................................................................
  2326.   @4_taktstrich(gyan|(10),x%,y%)                ! Taktstrich zeichnen
  2327.   @3_pausenzeichen(gyan|(17),gyan|(5),x%,y%)    ! Pausennote malen |1
  2328.   ' ----------------------------------------------------------------------------
  2329.   ' |1:         17 entspricht der Note e'', dort soll das Pausenzeichen (von
  2330.   '             oben) beginnen und bei f' (=5) enden.
  2331.   ' ----------------------------------------------------------------------------
  2332. RETURN
  2333. > PROCEDURE 3_pausenzeichen(a|,e|,x%,y%)                  !           "
  2334.   ' ----------------------------------------------------------------------------
  2335.   BOX x%+2,y%+a|+1,x%+5,y%+e|                   ! Pausenzeichen
  2336.   COLOR 0                                       ! Radiergummifarbe: weiß
  2337.   BOX x%+3,y%+a|+2,x%+4,y%+e|-1                 ! Pausenzeichen (innen hohl)
  2338.   COLOR 1                                       ! normale Zeichenfarbe: schwarz
  2339.   ' ----------------------------------------------------------------------------
  2340. RETURN
  2341. > PROCEDURE 2_note_zeichnen(stimme|,platz%,th|,g!,u!,t!)  !           "
  2342.   ' ----------------------------------------------------------------------------
  2343.   ' th|                                         ! Tonhöhe (1-25)
  2344.   ' g!                                          ! Gebundenzeichen
  2345.   ' u!                                          ! Untere Klaviatur
  2346.   ' t!                                          ! Taktstrich
  2347.   '
  2348.   LOCAL c$                                      ! Codierung für Notenfoto
  2349.   LOCAL yan|                                    ! y-Anfang Notenkopf (Abkürzung)
  2350.   LOCAL y|                                      ! Tonkopfstartabkürzung
  2351.   LOCAL xs%                                     ! x-Startposition links
  2352.   LOCAL ys%                                     ! y-Startposition oben
  2353.   LOCAL k!                                      ! Kreuzflag
  2354.   ' ............................................................................
  2355.   SELECT th|                                    ! betrachte tonhoehe
  2356.   CASE 2,4,7,9,11,14,16,19,21,23                ! f schwarze Taste
  2357.     LET k!=TRUE                                 ! Kreuzflag setzen
  2358.   ENDSELECT                                     !
  2359.   ' ............................................................................
  2360.   LET y|=gyan|(th|)                             ! Arrayeintrag abkürzen
  2361.   IF stimme|=1                                  ! f erste Stimme |1
  2362.     LET xs%=gx%(1,platz%)                       ! x-Startposition links
  2363.     LET ys%=gy%(1,platz%)                       ! y-Startposition oben
  2364.   ELSE                                          ! f zweite Stimme
  2365.     LET xs%=gx%(2,platz%)                       ! x-Startposition links
  2366.     LET ys%=gy%(2,platz%)                       ! y-Startposition oben
  2367.   ENDIF                                         !
  2368.   @3_note_k(1,y|,xs%,ys%,th|,k!,g!,u!,t!)       ! Note konstr.für 1.Stimme
  2369.   IF stimme|=1                                  ! f erste Stimme |1
  2370.     LET xs%=gx%(1,platz%+30)                    ! x-Startposition links
  2371.     LET ys%=gy%(1,platz%+30)                    ! y-Startposition oben
  2372.   ELSE                                          ! f zweite Stimme
  2373.     LET xs%=gx%(2,platz%+30)                    ! x-Startposition links
  2374.     LET ys%=gy%(2,platz%+30)                    ! y-Startposition oben
  2375.   ENDIF                                         !
  2376.   @3_note_k(2,y|,xs%,ys%,th|,k!,g!,u!,t!)       ! Note konstr. für 2.Stimme
  2377.   ' ----------------------------------------------------------------------------
  2378.   ' |1:         Hier hat die Stimmennr nur grafische Bedeutung, dh. es wird
  2379.   '             festgelegt, bei welcher Zeile die Note konstruiert und foto-
  2380.   '             grafiert wird. Erst bei
  2381.   '             Aufruf von 3_note_k(x,...) wird durch x festgelegt, daß die
  2382.   '             Note später für die x. Stimme vorgesehen ist (Unterschied:
  2383.   '             bei der 1. Stimme geht der Notenhals nach unten,
  2384.   '             bei der 2. Stimme geht der Notenhals nach oben.
  2385.   ' ----------------------------------------------------------------------------
  2386. RETURN
  2387. > PROCEDURE 3_note_k(s|,ya|,xs%,ys%,t|,k!,g!,u!,t!)       !           "
  2388.   ' ----------------------------------------------------------------------------
  2389.   @4_notenhals(s|,ya|,xs%,ys%)                  ! Grundnote zeichnen
  2390.   @4_notenkopf(ya|,xs%,ys%)                     ! Grundnote zeichnen
  2391.   IF t!                                         ! f Taktstrich gesetzt:
  2392.     @4_taktstrich(ya|,xs%,ys%)                  ! Taktstrich zeichnen
  2393.   ENDIF                                         !
  2394.   IF k!                                         ! f Note erhöht:
  2395.     @4_kreuz(ya|,xs%,ys%)                       ! Kreuzsymbol zeichnen
  2396.   ENDIF                                         !
  2397.   IF u!                                         ! f untere Klaviatur gemeint:
  2398.     @4_untere_klav(ya|,xs%,ys%)                 ! Unt.Kl.symbol zeichnen
  2399.   ENDIF                                         !
  2400.   IF g!                                         ! f Note mit voriger gebunden:
  2401.     @4_gebunden(ya|,xs%,ys%)                    ! Gebundensymbol zeichnen
  2402.   ENDIF                                         !
  2403.   IF ya|=2                                      ! oberes c
  2404.     @4_obere_hilfslinie_1(xs%,ys%)              !
  2405.     @4_obere_hilfslinie_2(xs%,ys%)              !
  2406.   ELSE IF ya|=5                                 ! oberes h
  2407.     @4_obere_hilfslinie_1(xs%,ys%)              !
  2408.   ELSE IF ya|=7                                 ! oberes ais oder oberes a
  2409.     @4_obere_hilfslinie_1(xs%,ys%)              !
  2410.   ELSE IF ya|=37                                ! unteres c
  2411.     @4_untere_hilfslinie(xs%,ys%)               !
  2412.   ENDIF                                         !
  2413.   ' ----------------------------------------------------------------------------
  2414. RETURN
  2415. > PROCEDURE 4_notenhals(st|,yn|,x%,y%)                    !           "
  2416.   ' ----------------------------------------------------------------------------
  2417.   IF st|=1                                      ! f erste Stimme:
  2418.     LINE x%+4,y%+yn|,x%+4,y%+46                 ! Notenhals nach unten
  2419.   ELSE                                          ! f zweite Stimme
  2420.     LINE x%+4,y%,x%+4,y%+yn|                    ! Notenhals nach oben
  2421.   ENDIF                                         !
  2422.   ' ----------------------------------------------------------------------------
  2423. RETURN
  2424. > PROCEDURE 4_notenkopf(yn|,x%,y%)                        !           "
  2425.   ' ----------------------------------------------------------------------------
  2426.   PBOX x%+1,y%+yn|,x%+6,y%+yn|+4                ! Notenkopf
  2427.   ' ----------------------------------------------------------------------------
  2428. RETURN
  2429. > PROCEDURE 4_taktstrich(yn|,x%,y%)                       !           "
  2430.   ' ----------------------------------------------------------------------------
  2431.   LINE x%+3,y%,x%+3,y%+46                       ! Notenhals verstärken
  2432.   LINE x%+4,y%,x%+4,y%+46                       ! Notenhals verstärken
  2433.   ' ----------------------------------------------------------------------------
  2434. RETURN
  2435. > PROCEDURE 4_kreuz(yn|,x%,y%)                            !           "
  2436.   ' ----------------------------------------------------------------------------
  2437.   PBOX x%+1,y%+yn|-3,x%+6,y%+yn|-2              ! Kreuzzeichen über Notenkopf
  2438.   COLOR 0                                       ! Radiergummifarbe: weiß
  2439.   LINE x%+1,y%+yn|-1,x%+6,y%+yn|-1              !
  2440.   COLOR 1                                       ! normale Zeichenfarbe: schwarz
  2441.   ' ----------------------------------------------------------------------------
  2442. RETURN
  2443. > PROCEDURE 4_untere_klav(yn|,x%,y%)                      !           "
  2444.   ' ----------------------------------------------------------------------------
  2445.   PBOX x%+1,y%+yn|+6,x%+6,y%+yn|+7              ! Unt.-Kl.-Zeichen unter Notenk.
  2446.   COLOR 0                                       ! Radiergummifarbe: weiß
  2447.   LINE x%+1,y%+yn|+5,x%+6,y%+yn|+5              !
  2448.   COLOR 1                                       ! normale Zeichenfarbe: schwarz
  2449.   ' ----------------------------------------------------------------------------
  2450. RETURN
  2451. > PROCEDURE 4_gebunden(yn|,x%,y%)                         !           "
  2452.   ' ----------------------------------------------------------------------------
  2453.   DEFFILL 0                                     ! Gebundenzeichen: hohler Kopf
  2454.   PBOX x%+2,y%+yn|+1,x%+5,y%+yn|+3              ! Notenkopf
  2455.   DEFFILL 1                                     ! wieder normales Füllmuster
  2456.   ' ----------------------------------------------------------------------------
  2457. RETURN
  2458. > PROCEDURE 4_obere_hilfslinie_1(x%,y%)                   !           "
  2459.   ' ----------------------------------------------------------------------------
  2460.   LINE x%,y%+7+2,x%+7,y%+7+2                    ! Hilfslinie
  2461.   ' ----------------------------------------------------------------------------
  2462. RETURN
  2463. > PROCEDURE 4_obere_hilfslinie_2(x%,y%)                   !           "
  2464.   ' ----------------------------------------------------------------------------
  2465.   LINE x%,y%+2+2,x%+7,y%+2+2                    ! Hilfslinie
  2466.   ' ----------------------------------------------------------------------------
  2467. RETURN
  2468. > PROCEDURE 4_untere_hilfslinie(x%,y%)                    !           "
  2469.   ' ----------------------------------------------------------------------------
  2470.   LINE x%,y%+37+2,x%+7,y%+37+2                  ! Hilfslinie
  2471.   ' ----------------------------------------------------------------------------
  2472. RETURN
  2473. ' ..............................................................................
  2474. > PROCEDURE 1_klaviatur_fotografieren
  2475.   ' ----------------------------------------------------------------------------
  2476.   LOCAL y2%                                     ! unten
  2477.   ' ............................................................................
  2478.   LET y2%=15                                    ! unten=Menühöhe-1
  2479.   GET 0,0,639,y2%,gkl$                          ! Klaviatur fotografieren
  2480.   ' ----------------------------------------------------------------------------
  2481. RETURN
  2482. > PROCEDURE 1_notenschluessel_fotografieren
  2483.   ' ----------------------------------------------------------------------------
  2484.   LOCAL x%,y%                                   ! Koord. für GET
  2485.   ' ............................................................................
  2486.   LET x%=gx%(1,319)                             ! Erst mal Hintergrund löschen:
  2487.   LET y%=gy%(1,319)                             !
  2488.   ' ............................................................................
  2489.   GET x%-2,y%,x%+15,y%+45,gns$                  ! fertigen Notenschl.fotogr.
  2490.   ' ----------------------------------------------------------------------------
  2491. RETURN
  2492. > PROCEDURE 1_notenbilder_fotografieren
  2493.   ' ----------------------------------------------------------------------------
  2494.   @2_leerbild_fotografieren                     ! Leernote für Radiergummifkt.
  2495.   @2_pause_fotografieren                        ! Pausenzeichen
  2496.   ' ............................................................................
  2497.   FOR i|=1 TO 25                                ! Noten von 2 Oktaven durch
  2498.     @2_note_fotografieren(1,0*80+i|,i|,0,0,0)   ! ungeb.,  ob.kl., kein Tktstr.
  2499.     @2_note_fotografieren(2,0*80+i|,i|,0,0,1)   ! ungeb.,  ob.kl.,      Tktstr.
  2500.     @2_note_fotografieren(1,1*80+i|,i|,1,0,1)   !   geb.,  ob.kl.,      Tktstr.
  2501.     @2_note_fotografieren(2,1*80+i|,i|,1,0,0)   !   geb.,  ob.kl., kein Tktstr.
  2502.     @2_note_fotografieren(1,2*80+i|,i|,0,1,0)   ! ungeb., unt.kl., kein Tktstr.
  2503.     @2_note_fotografieren(2,2*80+i|,i|,0,1,1)   ! ungeb., unt.kl.,      Tktstr.
  2504.     @2_note_fotografieren(1,3*80+i|,i|,1,1,1)   !   geb., unt.kl.,      Tktstr.
  2505.     @2_note_fotografieren(2,3*80+i|,i|,1,1,0)   !   geb., unt.kl., kein Tktstr.
  2506.   NEXT i|                                       ! nächste Note
  2507.   ' ----------------------------------------------------------------------------
  2508. RETURN
  2509. > PROCEDURE 2_leerbild_fotografieren
  2510.   ' ----------------------------------------------------------------------------
  2511.   LOCAL xs%                                     ! x-Startposition links
  2512.   LOCAL ys%                                     ! y-Startposition oben
  2513.   ' ............................................................................
  2514.   LET xs%=gx%(1,74)                             ! x-Startposition links
  2515.   LET ys%=gy%(1,74)                             ! y-Startposition oben
  2516.   GET xs%,ys%,xs%+7,ys%+44,gb$(1,0)             ! Leernote fotografieren
  2517.   GET xs%,ys%,xs%+7,ys%+44,gb$(2,0)             ! Leernote fotografieren
  2518.   ' ----------------------------------------------------------------------------
  2519. RETURN
  2520. > PROCEDURE 2_pause_fotografieren
  2521.   ' ----------------------------------------------------------------------------
  2522.   LOCAL x%                                      ! x-Startposition links
  2523.   LOCAL y%                                      ! y-Startposition oben
  2524.   ' ............................................................................
  2525.   LET x%=gx%(1,79)                              ! x-Startposition links
  2526.   LET y%=gy%(1,79)                              ! y-Startposition oben
  2527.   ' ............................................................................
  2528.   GET x%,y%,x%+7,y%+44,gb$(1,26)                ! Pausennote fotografieren
  2529.   GET x%,y%,x%+7,y%+44,gb$(2,26)                ! Pausennote fotografieren
  2530.   ' ............................................................................
  2531.   LET x%=gx%(1,76)                              ! x-Startposition links
  2532.   LET y%=gy%(1,76)                              ! y-Startposition oben
  2533.   ' ............................................................................
  2534.   GET x%,y%,x%+7,y%+44,gb$(1,26+32)             ! Pausennote mit Taktstr.1.Stim.
  2535.   GET x%,y%,x%+7,y%+44,gb$(2,26+32)             ! Pausennote mit Taktstr.2.Stim.
  2536.   ' ----------------------------------------------------------------------------
  2537. RETURN
  2538. > PROCEDURE 2_note_fotografieren(stimme|,platz%,th|,g!,u!,t!)
  2539.   ' ----------------------------------------------------------------------------
  2540.   ' th|                                         ! Tonhöhe (1-25)
  2541.   ' g!                                          ! Gebundenzeichen
  2542.   ' u!                                          ! Untere Klaviatur
  2543.   ' t!                                          ! Taktstrich
  2544.   '
  2545.   LOCAL c$                                      ! Codierung für Notenfoto
  2546.   LOCAL yan|                                    ! y-Anfang Notenkopf (Abkürzung)
  2547.   LOCAL y|                                      ! Tonkopfstartabkürzung
  2548.   LOCAL xs%                                     ! x-Startposition links
  2549.   LOCAL ys%                                     ! y-Startposition oben
  2550.   LOCAL k!                                      ! Kreuzflag
  2551.   ' ............................................................................
  2552.   SELECT th|                                    ! betrachte tonhoehe
  2553.   CASE 2,4,7,9,11,14,16,19,21,23                ! f schwarze Taste
  2554.     LET k!=TRUE                                 ! Kreuzflag setzen
  2555.   ENDSELECT                                     !
  2556.   ' ............................................................................
  2557.   LET y|=gyan|(th|)                             ! Arrayeintrag abkürzen
  2558.   IF stimme|=1                                  ! f erste Stimme |1
  2559.     LET xs%=gx%(1,platz%)                       ! x-Startposition links
  2560.     LET ys%=gy%(1,platz%)                       ! y-Startposition oben
  2561.   ELSE                                          ! f zweite Stimme
  2562.     LET xs%=gx%(2,platz%)                       ! x-Startposition links
  2563.     LET ys%=gy%(2,platz%)                       ! y-Startposition oben
  2564.   ENDIF                                         !
  2565.   LET c$=STR$(ABS(g!))                          ! Gebundenzeichen codieren
  2566.   LET c$=c$+STR$(ABS(u!))                       ! Unt-Kl.-Zeichen codieren
  2567.   LET c$=c$+STR$(ABS(t!))                       ! Taktstrich codieren
  2568.   LET c$=c$+BIN$(th|,5)                         ! Tonhöhe codieren
  2569.   GET xs%,ys%,xs%+7,ys%+44,gb$(1,VAL("%"+c$))   ! Note fotografieren
  2570.   ' ............................................................................
  2571.   IF stimme|=1                                  ! f erste Stimme |1
  2572.     LET xs%=gx%(1,platz%+30)                    ! x-Startposition links
  2573.     LET ys%=gy%(1,platz%+30)                    ! y-Startposition oben
  2574.   ELSE                                          ! f zweite Stimme
  2575.     LET xs%=gx%(2,platz%+30)                    ! x-Startposition links
  2576.     LET ys%=gy%(2,platz%+30)                    ! y-Startposition oben
  2577.   ENDIF                                         !
  2578.   LET c$=STR$(ABS(g!))                          ! Gebundenzeichen codieren
  2579.   LET c$=c$+STR$(ABS(u!))                       ! Unt-Kl.-Zeichen codieren
  2580.   LET c$=c$+STR$(ABS(t!))                       ! Taktstrich codieren
  2581.   LET c$=c$+BIN$(th|,5)                         ! Tonhöhe codieren
  2582.   GET xs%,ys%,xs%+7,ys%+44,gb$(2,VAL("%"+c$))   ! Note fotografieren
  2583.   ' ----------------------------------------------------------------------------
  2584.   ' |1:         Hier hat die Stimmennr nur grafische Bedeutung, dh. es wird
  2585.   '             festgelegt, bei welcher Zeile die Note konstruiert und foto-
  2586.   '             grafiert wird.
  2587.   ' ----------------------------------------------------------------------------
  2588. RETURN
  2589. ' ..............................................................................
  2590. > PROCEDURE 1_workscreen_menue
  2591.   ' ----------------------------------------------------------------------------
  2592.   LOCAL a$                                      ! Lesestring
  2593.   RESTORE hauptmenue                            ! Lesezeiger initialisieren
  2594.   FOR i|=1 TO 4                                 ! alle Abkürzungen durch
  2595.     READ a$                                     ! Befehlsabkürzung einlesen
  2596.     LET gm$=gm$+a$                              ! Menüstring ergänzen
  2597.     EXIT IF i|=4                                ! hinter letzt.Eintr.kein "  "
  2598.     LET gm$=gm$+" "                             ! Trenn-Leerplatz zw. Einträgen
  2599.   NEXT i|                                       ! nächste Abkürzung
  2600.   @2_workscreen_menue_zeigen                    !
  2601.   ' ----------------------------------------------------------------------------
  2602.   ' Hier wird die Menüzeile, die erste Zeile ganz oben am Arbeitsbild-
  2603.   ' schirm geschrieben.
  2604.   ' ----------------------------------------------------------------------------
  2605. RETURN
  2606. > PROCEDURE 2_workscreen_menue_zeigen
  2607.   ' ----------------------------------------------------------------------------
  2608.   LOCAL m$                                      ! Modus-Text
  2609.   ' ............................................................................
  2610.   IF NOT gmidi!                                 ! f Midi ausgeschaltet:
  2611.     PUT 0,0,gkl$                                ! Klaviatur anzeigen
  2612.   ELSE                                          ! f Midi eingeschaltet:
  2613.     LET m$="Modus: Stückbearbeitung über Midi"  ! Modus angeben
  2614.     PRINT AT(1,1);m$;SPACE$(80-LEN(m$));        ! Menüzeile anzeigen
  2615.     PRINT AT(80-LEN(gname$),1);gname$;          ! akt. Stücknamen anzeigen
  2616.     PRINT CHR$(27);CHR$(112);                   ! Revers ein
  2617.     PRINT CHR$(27);CHR$(113);                   ! Revers aus
  2618.   ENDIF                                         !
  2619.   ' ............................................................................
  2620.   SHOWM                                         ! Mauspfeil sichtbar machen
  2621.   ' ----------------------------------------------------------------------------
  2622. RETURN
  2623. > PROCEDURE 1_cursor_setzen
  2624.   ' ----------------------------------------------------------------------------
  2625.   PUT gx%(gs|,gc%),gy%(gs|,gc%),gb$(gs|,0),8    ! Leernote auf Platz 1 invers.
  2626.   ' ----------------------------------------------------------------------------
  2627. RETURN
  2628. ' ------------------------------------------------------------------------------
  2629. > PROCEDURE 0_sonstige_vorbereitungen
  2630.   ' ----------------------------------------------------------------------------
  2631.   @1_dateiname_kreieren(gname$)                 ! aktueller Stückname
  2632.   @1_druckeranpassung                           !
  2633.   @1_midi_sounds_setzen                         !
  2634.   @4_hauptfile_laden(-1)                        ! Parameter -1 sagt:Prg-Start |1
  2635.   ' ----------------------------------------------------------------------------
  2636.   ' |1:         Nicht bei PD-Version, da sonst kein Start aus Ordnern möglich!
  2637.   ' ----------------------------------------------------------------------------
  2638. RETURN
  2639. > PROCEDURE 1_dateiname_kreieren(VAR name$)
  2640.   ' ----------------------------------------------------------------------------
  2641.   LET name$="XXX"+RIGHT$(DATE$,1)               ! Nr.+Jahr in Neunzigern: 199x
  2642.   LET name$=name$+LEFT$(DATE$,2)                ! Wochentag
  2643.   LET name$=name$+MID$(DATE$,4,2)               ! Monat
  2644.   ' ----------------------------------------------------------------------------
  2645. RETURN
  2646. > PROCEDURE 1_druckeranpassung
  2647.   ' ----------------------------------------------------------------------------
  2648.   LOCAL r%                                      ! Druckparameter
  2649.   LOCAL a$                                      ! Binärstring
  2650.   ' ............................................................................
  2651.   LET r%=XBIOS(33,-1)                           ! Druckparameter lesen
  2652.   ' PRINT a$                                    ! test
  2653.   LET a$=BIN$(r%)                               ! Binär
  2654.   MID$(a$,LEN(a$)-2)="1"                        ! 960 Pkte  GFA-Handb: 12 - 25
  2655.   LET r%=VAL("&X"+a$)                           ! Dezimal
  2656.   LET r%=XBIOS(33,r%)                           ! Parameter setzen
  2657.   ' LET r%=XBIOS(33,-1)                         ! Parameter lesen / test
  2658.   ' LET a$=BIN$(r%)                             ! test
  2659.   ' PRINT a$                                    ! test
  2660.   ' ----------------------------------------------------------------------------
  2661. RETURN
  2662. > PROCEDURE 1_midi_sounds_setzen
  2663.   ' ----------------------------------------------------------------------------
  2664.   IF gmidi!                                     ! f Midi eingeschaltet:
  2665.     OUT 3,192,gk1|                              ! Sound Kanal 1
  2666.     OUT 3,193,gk2|                              ! Sound Kanal 2
  2667.     OUT 3,194,gk3|                              ! Sound Kanal 3
  2668.   ENDIF                                         !
  2669.   ' ----------------------------------------------------------------------------
  2670. RETURN
  2671. ' ##############################################################################
  2672. '  H A U P T P R O G R A M M E B E N E :
  2673. ' ##############################################################################
  2674. > PROCEDURE 0_oberste_schleife_hauptprogramm
  2675.   ' ----------------------------------------------------------------------------
  2676.   LOCAL hptm!                                   ! Hauptmenüschalter
  2677.   LOCAL t|                                      ! Maustaste
  2678.   LOCAL x%                                      ! x-Mauskoordinate
  2679.   LOCAL y%                                      ! y-Mauskoordinate
  2680.   LOCAL n%                                      ! Tastatur
  2681.   LOCAL u%                                      ! Umschalttaste
  2682.   LOCAL m$                                      ! Klaviatur
  2683.   ' ............................................................................
  2684.   DO                                            !
  2685.     ' ..........................................................................
  2686.     MOUSE x%,y%,t|                              ! Maustaste
  2687.     KEYLOOK n%                                  ! Tastatur
  2688.     LET n%=BCLR(n%,28)                          ! CapsLock-Bit ausschalten
  2689.     LET m$=INPMID$                              ! Klaviatur
  2690.     LET u%=BIOS(11,-1)                          ! Umschalttaste erfahren
  2691.     ' ..........................................................................
  2692.     IF y%<17 AND (gmidi! OR hptm!)              ! f Maus auf Menü und Midi ein
  2693.       @1_hauptmenue                             !
  2694.       LET hptm!=FALSE                           ! Hauptmenü ausschalten
  2695.       @1_ton_aus                                !
  2696.     ELSE IF y%<17 AND (NOT gmidi!) AND t|<>0    ! f Maus auf Klaviatur &Midi ein
  2697.       @1_simuliere_midi(t|,x%,u%,hptm!,n%,m$)   !
  2698.       @1_klaviaturanalyse(m$,u%,n%)             ! Eingabe analysieren |1
  2699.       @2_workscreen_menue_zeigen                !
  2700.       @1_ton_aus                                !
  2701.     ELSE IF t|                                  ! f Maustaste gedrückt:
  2702.       @1_mausanalyse(x%,y%,t|,u%)               ! Eingabe analysieren
  2703.       @2_workscreen_menue_zeigen                !
  2704.       @1_ton_aus                                !
  2705.     ELSE IF n% AND n%<>3.73558E+06 AND n%<>3.01476E+06  ! f Tastaturtaste gedrückt:
  2706.       @1_tastaturanalyse(n%)                    ! Eingabe analysieren
  2707.       @2_workscreen_menue_zeigen                !
  2708.       @1_ton_aus                                !
  2709.     ELSE IF m$<>"" OR n%=3.73558E+06 OR n%=3.01476E+06  ! f Kl.- v Space v 'c' gedrückt:
  2710.       @1_klaviaturanalyse(m$,u%,n%)             ! Eingabe analysieren |1
  2711.       @2_workscreen_menue_zeigen                !
  2712.       @1_ton_aus                                !
  2713.     ENDIF                                       !
  2714.     ' ..........................................................................
  2715.   LOOP                                          !
  2716.   ' ----------------------------------------------------------------------------
  2717.   ' |1:         Bios-Funktion untersucht, ob Umschalttaste gedrückt.
  2718.   ' ----------------------------------------------------------------------------
  2719. RETURN
  2720. > PROCEDURE 1_ton_aus
  2721.   ' ----------------------------------------------------------------------------
  2722.   IF gmidi!                                     ! f Midi ein:
  2723.     @4_alter_ton_aus_auf_kanal_1                ! Kanal 1 entspricht Stimme 1
  2724.     @4_alter_ton_aus_auf_kanal_2                ! Kanal 2 entspricht Stimme 2
  2725.     @4_alter_ton_aus_auf_kanal_3                ! Schlagzeug aus (Taktstrich)
  2726.   ELSE                                          ! f Midi aus
  2727.     WAVE 0,0                                    !
  2728.   ENDIF                                         !
  2729.   ' ----------------------------------------------------------------------------
  2730.   ' PROCEDURE 4_programmende(w|)
  2731.   ' ----------------------------------------------------------------------------
  2732. RETURN
  2733. ' ------------------------------------------------------------------------------
  2734. > PROCEDURE 1_hauptmenue
  2735.   ' ----------------------------------------------------------------------------
  2736.   LOCAL i|                                      ! Zähler für Menüeinträge
  2737.   LOCAL t|                                      ! Maustastenmerker
  2738.   LOCAL a|                                      ! Nr. des gewählten Menüeintrags
  2739.   DIM h$(10)                                    ! Hauptmenüeintragsliste
  2740.   DIM g!(gm|)                                   ! Boolearray für Menü
  2741.   ' ............................................................................
  2742.   RESTORE hauptmenue                            ! Readzeiger auf Position
  2743.   REPEAT                                        ! Leseschleife
  2744.     INC i|                                      ! Eintragszähler erhöhen
  2745.     READ h$(i|)                                 ! Hauptmenüeintrag lesen
  2746.   UNTIL h$(i|)="##"                             ! Raus f nix eingelesen
  2747.   DEC i|                                        ! Anzahl der Hauptmenüeinträge
  2748.   ' ............................................................................
  2749. nochmal_hauptmenue:                           ! Hauptmenüschleife A n f a n g
  2750.   PRINT AT(1,1);gm$;SPACE$(80-LEN(gm$));        ! Menüzeile anzeigen
  2751.   PRINT AT(80-LEN(gname$),1);gname$;            ! akt. Stücknamen anzeigen
  2752.   PRINT CHR$(27);CHR$(112);                     ! Revers ein
  2753.   PRINT CHR$(27);CHR$(113);                     ! Revers aus
  2754.   SHOWM                                         ! Mauspfeil sichtbar machen
  2755.   @m(0,-1,0,-1,0,0,0,1,0,i|,1,t|,a|,h$(),g!())  ! großes Menü ausfahren
  2756.   ERASE g!()                                    ! Boolearray für Menü
  2757.   IF a|=0 OR MOUSEY>16                          ! F Abbr:nicht auf Menü+linkeMt.
  2758.     GOTO raus_hauptmenue                        !   oder Maus unterhalb Menü
  2759.   ENDIF                                         !
  2760.   @2_um(a|,t|)                                  ! Untermenü ausfahren
  2761.   @1_ton_aus                                    !
  2762.   PRINT AT(1,1);gm$;SPACE$(80-LEN(gm$));        ! Menüzeile anzeigen
  2763.   PRINT AT(80-LEN(gname$),1);gname$;            ! akt. Stücknamen anzeigen
  2764.   PRINT CHR$(27);CHR$(112);                     ! Revers ein
  2765.   PRINT CHR$(27);CHR$(113);                     ! Revers aus
  2766.   IF t|<>2                                      ! F nicht 'Eingabe fortsetzen':
  2767.     GOTO nochmal_hauptmenue                     ! Hauptmenüschleife  E n d e
  2768.   ENDIF                                         !
  2769.   ' ............................................................................
  2770. raus_hauptmenue:                              !
  2771.   ERASE h$()                                    ! Arrays löschen
  2772.   SHOWM                                         ! Mauspfeil sichtbar machen
  2773.   ' ----------------------------------------------------------------------------
  2774. RETURN
  2775. > PROCEDURE 2_um(w|,VAR m|)
  2776.   ' ----------------------------------------------------------------------------
  2777.   ' w|                                          ! Nr des gew.Eintr. im Hauptmenü
  2778.   ' m|                                          ! Abbruchflag,2=Abbr,sonst=weitr
  2779.   LOCAL i|                                      ! Zähler für Menüeinträge
  2780.   LOCAL q|                                      ! Nr. des gewählten Menüeintrags
  2781.   LOCAL b$                                      ! Bildschirmspeichervariable
  2782.   DIM m$(33)                                    ! Menüeintragsliste
  2783.   DIM k!(33)                                    ! Dummyarray
  2784.   ' ............................................................................
  2785.   SELECT w|                                     ! Nr. des gewählten Eintrags
  2786.   CASE 1                                        ! Eintrag Nr. 1:
  2787.     RESTORE diskette                            ! Read-Zeiger setzen
  2788.   CASE 2                                        ! Eintrag Nr. 2:
  2789.     RESTORE arbeiten                            ! Read-Zeiger setzen
  2790.   CASE 3                                        ! Eintrag Nr. 3:
  2791.     RESTORE blockfkt                            ! Read-Zeiger setzen
  2792.   CASE 4                                        ! Eintrag Nr. 4:
  2793.     RESTORE prg_ende                            ! Read-Zeiger setzen
  2794.   ENDSELECT                                     ! Ende der Verzweigung
  2795.   ' ............................................................................
  2796.   REPEAT                                        ! Leseschleife
  2797.     INC i|                                      ! Eintragszähler erhöhen
  2798.     READ m$(i|)                                 ! Hauptmenüeintrag lesen
  2799.   UNTIL m$(i|)="##"                             ! Raus f nix eingelesen
  2800.   DEC i|                                        ! Anzahl der Untermenüeinträge
  2801.   ' ............................................................................
  2802.   IF w|=2                                       ! f Arbeiten gewählt:
  2803.     IF gmidi!                                   ! f Midi eingeschaltet:
  2804.       LET m$(1)="Midi ausschalten"              !
  2805.     ELSE                                        ! f Midi ausgeschaltet:
  2806.       LET m$(1)="Midi einschalten"              !
  2807.     ENDIF                                       !
  2808.     IF gnotencode!                              ! f Nr-Ton-Cod. eingeschaltet:
  2809.       LET m$(2)="Nr-Ton-Codierung ausschalten"  !
  2810.     ELSE                                        ! f Nr-Ton-Cod. ausgeschaltet:
  2811.       LET m$(2)="Nr-Ton-Codierung einschalten"  !
  2812.     ENDIF                                       !
  2813.     IF gtaktschl!                               ! f Taktschlagz. eingeschaltet:
  2814.       LET m$(3)="Taktschlagzeug ausschalten"    !
  2815.     ELSE                                        ! f Taktschlagz. ausgeschaltet:
  2816.       LET m$(3)="Taktschlagzeug einschalten"    !
  2817.     ENDIF                                       !
  2818.   ENDIF                                         !
  2819.   ' ............................................................................
  2820.   SGET b$                                       ! Bildschirm retten
  2821.   @m(0,-1,0,-1,0,0,-1,2+(w|-1)*10,1,1,i|,m|,q|,m$(),k!())
  2822.   SPUT b$                                       ! Bildschirm wiederherstellen
  2823.   ' ............................................................................
  2824.   IF m|=2                                       ! F Abbruch gewählt:
  2825.     LET m|=1                                    ! Abbruchflag wieder löschen
  2826.     GOTO raus_untermenue                        !
  2827.   ENDIF                                         !
  2828.   @3_analys(w|,q|,m|)                           !
  2829. raus_untermenue:                              !
  2830.   ERASE m$(),k!()                               ! Arrays löschen
  2831.   ' ----------------------------------------------------------------------------
  2832. RETURN
  2833. > PROCEDURE 3_analys(w|,q|,VAR n|)
  2834.   ' ----------------------------------------------------------------------------
  2835.   ' w|                                          ! Nr des gew Eintr im Hauptmenü
  2836.   ' q|                                          ! Nr des gew Eintr im Untermenü
  2837.   ' n|                                          ! =2 für 'Eingabe fortsetzen
  2838.   ' ............................................................................
  2839.   IF w|=1 AND q|=1                              !       S P E I C H E R
  2840.     @4_accessories                              !
  2841.   ELSE IF w|=1 AND q|=3                         !
  2842.     @4_stueck_von_diskette_laden                !
  2843.   ELSE IF w|=1 AND q|=4                         !
  2844.     @4_stueck_auf_diskette_abspeichern          !
  2845.   ELSE IF w|=1 AND q|=6                         !
  2846.     @4_stueck_aus_hauptfile_laden               !
  2847.   ELSE IF w|=1 AND q|=7                         !
  2848.     @4_stueck_in_hauptfile_abspeichern          !
  2849.   ELSE IF w|=1 AND q|=9                         !
  2850.     @4_hauptfile_laden(0)                       !
  2851.   ELSE IF w|=1 AND q|=10                        !
  2852.     @4_hauptfile_abspeichern                    !
  2853.   ELSE IF w|=1 AND q|=11                        !
  2854.     @4_bestimmte_stuecke_loeschen               !
  2855.   ELSE IF w|=1 AND q|=13                        !
  2856.     @4_zweites_hauptfile_laden                  !
  2857.   ELSE IF w|=1 AND q|=14                        !
  2858.     @4_erstes_u_zweites_hauptfile_vertauschen   !
  2859.   ELSE IF w|=1 AND q|=15                        !
  2860.     @4_best_stuecke_ins_zweite_hptfle_kop       !
  2861.   ELSE IF w|=1 AND q|=17                        !
  2862.     @4_file_loeschen                            !
  2863.   ELSE IF w|=1 AND q|=18                        !
  2864.     @4_rename_file                              !
  2865.   ELSE IF w|=2 AND q|=1                         ! -----------------------------
  2866.     @4_midi_ein_ausschalten                     !
  2867.   ELSE IF w|=2 AND q|=2                         !
  2868.     @4_notencode_ausschalten                    !
  2869.   ELSE IF w|=2 AND q|=3                         !
  2870.     @4_taktschlagzeug_ausschalten               !
  2871.   ELSE IF w|=2 AND q|=5                         !
  2872.     @4_gebundenzeichen_setzen_loeschen          !       A R B E I T E N
  2873.   ELSE IF w|=2 AND q|=6                         !
  2874.     @4_unt_klav_setzen_loeschen                 !
  2875.   ELSE IF w|=2 AND q|=7                         !
  2876.     @4_taktstrich_setzen_loeschen               !
  2877.   ELSE IF w|=2 AND q|=9                         !
  2878.     @4_basistonlaenge_veraendern                !
  2879.   ELSE IF w|=2 AND q|=10                        !
  2880.     @4_bestimmte_stuecke_spielen                !
  2881.   ELSE IF w|=2 AND q|=11                        !
  2882.     @4_best_st_direkt_hintereinander_sp         !
  2883.   ELSE IF w|=2 AND q|=12                        !
  2884.     @4_alle_stuecke_ab_nr_x_spielen             !
  2885.   ELSE IF w|=2 AND q|=14                        !
  2886.     @4_inhaltsverzeichnis_korrigieren           !
  2887.   ELSE IF w|=2 AND q|=15                        !
  2888.     @4_inhaltsverzeichnis_alph_sortieren        !
  2889.   ELSE IF w|=2 AND q|=17                        !
  2890.     @4_inhaltsverz_vom_hauptfile_drucken        !
  2891.   ELSE IF w|=2 AND q|=18                        !
  2892.     @4_akt_stueck_mit_extra_kopfzeile_drucken   !
  2893.   ELSE IF w|=2 AND q|=19                        !
  2894.     @4_bestimmte_stuecke_drucken                !
  2895.   ELSE IF w|=3 AND q|=1                         ! -----------------------------
  2896.     @4_block_anfang_ende_setzen                 !       B L O C K F K T
  2897.   ELSE IF w|=3 AND q|=2 AND gbe%<>0             !
  2898.     @4_blockmarkierung_loeschen                 !
  2899.   ELSE IF w|=3 AND q|=4                         !
  2900.     @4_block_kopieren                           !
  2901.   ELSE IF w|=3 AND q|=6 AND gbe%<>0             !
  2902.     @4_blocknotenlaengen_verdoppeln             !
  2903.   ELSE IF w|=3 AND q|=7 AND gbe%<>0             !
  2904.     @4_blocknoten_transponieren                 !
  2905.   ELSE IF w|=3 AND q|=8 AND gbe%<>0             !
  2906.     @4_automatisch_taktstrich_setzen            !
  2907.   ELSE IF w|=3 AND q|=9 AND gbe%<>0             !
  2908.     @4_suchen_und_ersetzen_im_block             !
  2909.   ELSE IF w|=3 AND q|=11 AND gbe%<>0            !
  2910.     @4_block_loeschen                           !
  2911.   ELSE IF w|=4 AND q|=1                         ! -----------------------------
  2912.     @2_helptext                                 !       P R G - E N D E
  2913.   ELSE IF w|=4 AND q|=3                         !
  2914.     ' Edit                                      !
  2915.     @4_programmende(1)                          !
  2916.   ELSE IF w|=4 AND q|=5                         !
  2917.     ' Quit                                      !
  2918.     @4_programmende(2)                          !
  2919.   ENDIF                                         !
  2920.   ' ----------------------------------------------------------------------------
  2921. RETURN
  2922. ' ..............................................................................
  2923. > PROCEDURE 4_accessories                                 !    S P E I C H E R
  2924.   ' ----------------------------------------------------------------------------
  2925.   LOCAL i%                                      ! Eintragszähler
  2926.   LOCAL bld$                                    ! Speichervariable für Bildsch.
  2927.   DIM eintrag$(30)                              ! Eintragsarray dimensionieren
  2928.   ' ............................................................................
  2929.   SGET bld$                                     ! Bildschirm retten
  2930.   CLS                                           ! Bildschirm löschen
  2931.   DEFFILL 1,2,4                                 ! Bildsch so wie hinter Gem-Menü
  2932.   PBOX 0,0,gbb%,gbh%                            ! Füllen
  2933.   ' ............................................................................
  2934.   RESTORE gemmenuedaten                         ! Read-Zeiger setzen
  2935.   LET i%=-1                                     ! Starten bei 0
  2936.   REPEAT                                        ! Leseschleife
  2937.     INC i%                                      ! Eintragszähler erhöhen
  2938.     READ eintrag$(i%)                           ! Eintrag einlesen
  2939.   UNTIL eintrag$(i%)="##"                       ! r f Schlußmarke eingelesen
  2940.   LET eintrag$(i%)=""                           ! letztes (Schlußmarke) löschen
  2941.   ' ............................................................................
  2942.   MENU eintrag$()                               ! Gem-Menü,Eintragarray init.
  2943.   ON MENU GOSUB 5_accessories                   ! f gewählt,zur Analysierproz.
  2944.   OPENW 0                                       ! Gem-Menü-Fenster öffnen
  2945.   ' ............................................................................
  2946.   REPEAT                                        ! Gem-Menü-Hauptschleife
  2947.     ON MENU                                     ! Ereignisabfrage
  2948.   UNTIL gaccr!                                  ! r f Rausflag fürs Accessory
  2949.   ' ............................................................................
  2950.   ERASE eintrag$()                              ! Eintragsarray löschen
  2951.   MENU KILL                                     ! Gem-Menü ausschalten
  2952.   CLOSEW 0                                      ! Gem-Menü-Fenster schließen
  2953.   DEFFILL 1,2,8                                 ! Füllmuster wieder schwarz
  2954.   LET gaccr!=FALSE                              ! Rausflag fürs Acc-Menü löschen
  2955.   SPUT bld$                                     ! Bildschirm wiederherstellen
  2956.   ' ----------------------------------------------------------------------------
  2957. RETURN
  2958. > PROCEDURE 5_accessories
  2959.   ' ----------------------------------------------------------------------------
  2960.   ' Hier wird Analysiert, was (außer den Accessories) im Gem-Menü gewählt wurde.
  2961.   ' ----------------------------------------------------------------------------
  2962.   LOCAL m%                                      ! Eintragsnr des gew. Eintrags
  2963.   ' ............................................................................
  2964.   MENU OFF                                      ! invert. Eintrag wieder normal
  2965.   LET m%=MENU(0)                                ! Eintragsnummer ermitteln
  2966.   ' ............................................................................
  2967.   IF m%=1                                       ! Eintrag: 'Notedita' gewählt:
  2968.     @6_programminfo                             !
  2969.   ELSE IF m%=11                                 ! Eintrag: 'Zurück' gewählt:
  2970.     LET gaccr!=TRUE                             ! Rausflag fürs Acc-Menü setzen
  2971.   ENDIF                                         ! Ende der Analyse
  2972.   ' ----------------------------------------------------------------------------
  2973. RETURN
  2974. > PROCEDURE 6_programminfo
  2975.   ' ----------------------------------------------------------------------------
  2976.   LOCAL dummy|                                  !
  2977.   LOCAL b$                                      ! Infostring
  2978.   ' ............................................................................
  2979.   LET b$="Duedita 1.5||Autor: Martin "          !
  2980.   LET b$=b$+"Mittelmaier|       Ufnaustr.3,"    !
  2981.   LET b$=b$+"1Berlin21"                         !
  2982.   LET b$=b$+"||Bitte schreiben Sie mir Ihre|Me" !
  2983.   LET b$=b$+"inung zum Programm!|/Versprochen"  !
  2984.   LET b$=b$+"!|Mach ich ganz bestimmt!"         !
  2985.   CLOSEW 0                                      ! Gem-Menü-Fenster schließen |1
  2986.   a_alert(b$,dummy|)                            !
  2987.   OPENW 0                                       ! Gem-Menü-Fenster öffnen
  2988.   ' ............................................................................
  2989.   DEFFILL 1,2,4                                 ! Bildsch so wie hinter Gem-Menü
  2990.   BOUNDARY 0                                    ! Umrahmung ausschalten
  2991.   PBOX 0,0,639,399-20                           ! Füllen (-20,wegen Menüleiste)
  2992.   BOUNDARY 1                                    ! Umrahmung einschalten
  2993.   DEFFILL 1,2,8                                 ! Füllmuster wieder schwarz
  2994.   ' ----------------------------------------------------------------------------
  2995.   ' |1:         Sonst werden Wahleinträge nicht invers dargestellt.
  2996.   ' ----------------------------------------------------------------------------
  2997. RETURN
  2998. > PROCEDURE 4_stueck_von_diskette_laden
  2999.   ' ----------------------------------------------------------------------------
  3000.   LOCAL a|                                      ! Speicher für Notencharakterist
  3001.   LOCAL s|                                      ! Stimmzähler
  3002.   LOCAL name$                                   ! Dateiname
  3003.   LOCAL n$                                      ! Abk.für"
  3004.   LOCAL i$                                      ! Infostring
  3005.   ' ............................................................................
  3006.   LET i$="Gewählt: S T Ü C K   L A D E N"       !
  3007.   LET i$=i$+"   Bisher: "                       !
  3008.   @a_info(i$+gname$)                            !
  3009.   @a_tastaturpuffer_leeren                      !
  3010.   FILESELECT gpfad$+"*.DTA",gname$,name$        ! Fileselectbox aufrufen
  3011.   gpfad$=LEFT$(name$,RINSTR(name$,"\"))         ! Nur bis letztem Backslash
  3012.   ' ............................................................................
  3013.   IF name$<>"" AND EXIST(name$)                 ! f was ausgewählt:
  3014.     ' ..........................................................................
  3015.     LET i$="Folgendes Stück wird geladen: "     !
  3016.     @a_info(i$+name$)                           !
  3017.     @5_aut_extension("DTA",name$)               !
  3018.     LET n$=name$                                !
  3019.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3020.     LET n$=LEFT$(n$,INSTR(n$,".")-1)            ! Name ohne Extension betrachten
  3021.     LET guname$=gname$                          ! Undo-Sicherungskopie vom Namen
  3022.     LET gname$=n$                               !
  3023.     @3_cursor_loeschen                          !
  3024.     CLR gba%,gbe%                               ! Blockanfang/ende löschen |1
  3025.     OPEN "I",#1,name$                           !
  3026.     FOR s|=1 TO 2                               ! Beide Stimmen durch
  3027.       LET gu$(s|)=ga$(s|)                       ! Undo-sicherungs-kopie
  3028.       LET ga$(s|)=""                            ! Notenstück löschen
  3029.       DO                                        ! Notenleseschleife
  3030.         EXIT IF EOF(#1)                         ! raus f Dateiende
  3031.         LET a|=INP(#1)                          ! Notencharakteristik lesen
  3032.         EXIT IF a|=255                          ! raus f Trennstrich
  3033.         LET ga$(s|)=ga$(s|)+CHR$(a|)            ! Notenspeicherstring erneuern
  3034.       LOOP                                      !
  3035.     NEXT s|                                     ! nächste Stimme
  3036.     CLOSE #1                                    !
  3037.     ' ..........................................................................
  3038.   ELSE IF name$<>"" AND NOT EXIST(name$)        ! f was Nicht-Existierendes ausg
  3039.     ' ..........................................................................
  3040.     @5_aut_extension("DTA",name$)               !
  3041.     LET n$=name$                                !
  3042.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3043.     LET i$="Neues Stück namens "+n$+" ?"        !
  3044.     LET i$=i$+" / Ja | Nein"                    !
  3045.     @a_alert(i$,m|)                             !
  3046.     IF m|=1                                     ! f ja:
  3047.       LET gu$(1)=ga$(1)                         ! Undo-Sicherungskopie
  3048.       LET gu$(2)=ga$(2)                         ! "
  3049.       LET ga$(1)=""                             ! Stück leeren
  3050.       LET ga$(2)=""                             ! "
  3051.       LET n$=LEFT$(n$,INSTR(n$,".")-1)          ! Name ohne Extension betrachten
  3052.       LET guname$=gname$                        ! Undo-Sicherungskopie vom Namen
  3053.       LET gname$=n$                             ! Neuer Stückname
  3054.     ENDIF                                       !
  3055.     ' ..........................................................................
  3056.   ENDIF                                         !
  3057.   ' ............................................................................
  3058.   @5_neues_stueck_zeigen                        !
  3059.   ' ----------------------------------------------------------------------------
  3060.   ' |1:         Aber nicht gbs| (Blockstimme) löschen, denn sonst, kann man
  3061.   '             Block aus altem Stück nicht in neues kopieren + gleichzeitig
  3062.   '             zeigen.
  3063.   ' ----------------------------------------------------------------------------
  3064. RETURN
  3065. > PROCEDURE 5_neues_stueck_zeigen
  3066.   ' ----------------------------------------------------------------------------
  3067.   LET gs|=2                                     ! Erst 2. Stimme abbilden
  3068.   @6_noten_nur_zeigen(gs|,1,gm%)                !
  3069.   LET gs|=1                                     ! Dann 1. Stimme abbilden
  3070.   @6_noten_nur_zeigen(gs|,1,gm%)                !
  3071.   @2_cursor_neu_setzen(LEN(ga$(1))+1,0,gs|)     !
  3072.   @2_workscreen_menue_zeigen                    !
  3073.   ' ----------------------------------------------------------------------------
  3074. RETURN
  3075. > PROCEDURE 6_noten_nur_zeigen(s|,a%,e%)
  3076.   ' ----------------------------------------------------------------------------
  3077.   LOCAL i%                                      ! Notenzähler
  3078.   ' ............................................................................
  3079.   IF e%>gm%                                     ! f letzte Note größer erlaubt:
  3080.     LET e%=gm%                                  ! nimm letzte erlaubte Note
  3081.   ENDIF                                         !
  3082.   ' ............................................................................
  3083.   FOR i%=a% TO e%                               ! Alle gewünschten Töne durch
  3084.     @3_ton_zeichnen(i%,s|)                      !
  3085.   NEXT i%                                       ! Nächster Ton
  3086.   ' ----------------------------------------------------------------------------
  3087.   ' PROCEDURE 2_backspace
  3088.   ' PROCEDURE 4_blockmarkierung_loeschen
  3089.   ' PROCEDURE 2_block_kopieren(p%)
  3090.   ' PROCEDURE 2_block_loeschen
  3091.   ' PROCEDURE 2_blocknotenlaengen_verdoppeln
  3092.   ' PROCEDURE 2_undo
  3093.   ' ----------------------------------------------------------------------------
  3094. RETURN
  3095. > PROCEDURE 4_stueck_auf_diskette_abspeichern
  3096.   ' ----------------------------------------------------------------------------
  3097.   LOCAL ok!                                     ! Diskspeicherfrageflag
  3098.   LOCAL s|                                      ! Stimmzähler
  3099.   LOCAL i%                                      ! Notenzähler
  3100.   LOCAL name$                                   ! Dateiname
  3101.   LOCAL n$                                      ! Abk.für"
  3102.   LOCAL i$                                      ! Infostring
  3103.   ' ............................................................................
  3104.   LET i$="Gewählt: S T Ü C K  "                 !
  3105.   LET i$=i$+"A B S P E I C H E R N  "           !
  3106.   LET i$=i$+" Bisher: "+gname$                  !
  3107.   @a_info(i$)                                   !
  3108.   @a_tastaturpuffer_leeren                      !
  3109.   ' ............................................................................
  3110.   REPEAT                                        !
  3111.     FILESELECT gpfad$+"*.DTA",gname$,name$      ! Fileselectbox aufrufen
  3112.     gpfad$=LEFT$(name$,RINSTR(name$,"\"))       ! Nur bis letztem Backslash
  3113.     IF EXIST(name$)                             !
  3114.       KILL name$                                !
  3115.     ENDIF                                       !
  3116.     @5_diskplatz(name$,650,ok!)                 ! Genügend Diskettenspeicher ?
  3117.   UNTIL ok! OR name$=""                         !
  3118.   ' ............................................................................
  3119.   IF name$<>""                                  ! f was ausgewählt:
  3120.     @5_aut_extension("DTA",name$)               !
  3121.     LET n$=name$                                !
  3122.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3123.     LET n$=LEFT$(n$,INSTR(n$,".")-1)            ! Name ohne Extension betrachten
  3124.     LET gname$=n$                               !
  3125.     LET i$="Stück wird gespeichert unter "      !
  3126.     @a_info(i$+name$)                           !
  3127.     OPEN "O",#1,name$                           !
  3128.     FOR s|=1 TO 2                               ! Beide Stimmen durch
  3129.       FOR i%=1 TO LEN(ga$(s|))                  ! Alle Noten einer Stimme durch
  3130.         OUT #1,ASC(MID$(ga$(s|),i%,1))          ! Notencharakteristik raus
  3131.       NEXT i%                                   ! nächste Note
  3132.       OUT #1,255                                ! Trennung zw. den den 2 Stimmen
  3133.     NEXT s|                                     ! nächste Stimme
  3134.     CLOSE #1                                    !
  3135.   ENDIF                                         !
  3136.   ' ............................................................................
  3137.   @2_workscreen_menue_zeigen                    !
  3138.   ' ----------------------------------------------------------------------------
  3139. RETURN
  3140. > PROCEDURE 5_diskplatz(na$,soll%,VAR ok!)
  3141.   ' ----------------------------------------------------------------------------
  3142.   LOCAL dummy|                                  !
  3143.   LOCAL l|                                      ! Laufwerksnummer
  3144.   LOCAL a%                                      ! Verfügbarer Diskspeicher
  3145.   LOCAL i$                                      ! Info
  3146.   ' ............................................................................
  3147.   IF na$=""                                     ! f Abbruch gewählt:
  3148.     GOTO raus_5_diskplatz                       !
  3149.   ENDIF                                         !
  3150.   ' ............................................................................
  3151.   LET l|=ASC(LEFT$(na$,1))-65                   ! Laufwerksnummer anhand Pfad f.
  3152.   LET i$="Der freie Platz auf dem Laufwerk "    !
  3153.   LET i$=i$+CHR$(l|+65)+" wird errechnet."      !
  3154.   @a_info(i$)                                   !
  3155.   LET a%=DFREE(l|)                              ! Wieviel Platz auf Laufwerk?
  3156.   ' ............................................................................
  3157.   IF a%>soll%                                   ! f genügend Platz
  3158.     LET ok!=TRUE                                ! ok geben
  3159.   ELSE                                          !
  3160.     LET i$="Nicht genug Platz |auf der "        !
  3161.     LET i$=i$+"Diskette!||"                     !
  3162.     LET i$=i$+"Soll-Wert: "+STR$(soll%)+"|"     !
  3163.     LET i$=i$+"Ist-Wert:  "+STR$(a%)+"||"       !
  3164.     LET i$=i$+"/So ein Mist!"                   !
  3165.     a_alert(i$,dummy|)                          !
  3166.   ENDIF                                         !
  3167.   ' ............................................................................
  3168. raus_5_diskplatz:                             !
  3169.   ' ----------------------------------------------------------------------------
  3170. RETURN
  3171. > PROCEDURE 5_aut_extension(soll$,VAR n$)
  3172.   ' ----------------------------------------------------------------------------
  3173.   LOCAL ext$                                    ! String für Extension
  3174.   ' ............................................................................
  3175.   LET ext$=RIGHT$(n$,LEN(n$)-INSTR(n$,"."))     ! Nur Extension betrachten
  3176.   IF ext$=n$                                    ! f keine Extension:
  3177.     LET n$=n$+"."+soll$                         ! Extension hinzufügen
  3178.   ELSE IF ext$<>soll$                           ! f Bockmist eingegeben
  3179.     LET n$=LEFT$(n$,INSTR(n$,".")-1)            ! Name ohne Extension betrachten
  3180.     LET n$=n$+"."+soll$                         ! Extension hinzufügen
  3181.   ENDIF                                         !
  3182.   ' ----------------------------------------------------------------------------
  3183. RETURN
  3184. > PROCEDURE 4_stueck_aus_hauptfile_laden
  3185.   ' ----------------------------------------------------------------------------
  3186.   LOCAL a|                                      ! Wahlvariable für Menü
  3187.   LOCAL m|                                      ! Maustastenvar. für Menü
  3188.   LOCAL i$                                      ! Infostring
  3189.   ' ............................................................................
  3190.   LET i$="Gewählt: Stück aus Hauptfile laden."  !
  3191.   LET i$=i$+" bisher:"+gname$                   ! alten Namen auch ausgeben
  3192.   @5_ein_stueck_aus_hauptfile(i$,a|,m|)         !
  3193.   ' ............................................................................
  3194.   IF m|<>2                                      ! f nicht Abbruch gewählt:
  3195.     CLR gba%,gbe%                               ! Blockanfang/ende löschen |1
  3196.     LET gu$(1)=ga$(1)                           ! Undo-Sicherungskopie 1.Stimme
  3197.     LET gu$(2)=ga$(2)                           ! Undo-Sicherungskopie 2.Stimme
  3198.     LET ga$(1)=gs$(1,a|)                        ! Stück übergeben, 1.Stimme
  3199.     LET ga$(2)=gs$(2,a|)                        ! Stück übergeben, 1.Stimme
  3200.     LET guname$=gname$                          ! Undo-Sicherungskopie vom Namen
  3201.     LET gname$=gi$(a|)                          ! Name aus Inhaltsverzeichnis
  3202.     @5_neues_stueck_zeigen                      !
  3203.   ENDIF                                         !
  3204.   ' ----------------------------------------------------------------------------
  3205.   ' |1:         Aber nicht gbs| (Blockstimme) löschen, denn sonst, kann man
  3206.   '             Block aus altem Stück nicht in neues kopieren + gleichzeitig
  3207.   '             zeigen.
  3208.   ' ----------------------------------------------------------------------------
  3209. RETURN
  3210. > PROCEDURE 5_ein_stueck_aus_hauptfile(i$,VAR a|,m|)
  3211.   ' ----------------------------------------------------------------------------
  3212.   LOCAL c$                                      ! Bildschirmnegativ
  3213.   DIM g!(gm|)                                   ! Boolearray für Menü
  3214.   ' ............................................................................
  3215.   SGET c$                                       ! Bildschirm retten
  3216.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  3217.   @a_info(i$)                                   !
  3218.   ' ............................................................................
  3219.   @m(0,0,-1,-1,0,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  3220.   ' ............................................................................
  3221.   SPUT c$                                       ! Bildschirm wieder herstellen
  3222.   ERASE g!()                                    ! Boolearray für Menü
  3223.   ' ----------------------------------------------------------------------------
  3224. RETURN
  3225. > PROCEDURE 4_stueck_in_hauptfile_abspeichern
  3226.   ' ----------------------------------------------------------------------------
  3227.   LOCAL dummy|                                  ! Dummy für Alertbox
  3228.   LOCAL m|                                      ! Nummer des abzusp. Stücks
  3229.   LOCAL i|                                      ! Stückzähler
  3230.   LOCAL a$                                      ! Diverse Texte
  3231.   LOCAL bld$                                    ! Bildschirm retten
  3232.   ' ............................................................................
  3233.   SGET bld$                                     ! Bildschirm retten
  3234.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  3235.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile löschen
  3236.   LET a$="In Hauptfile absp./Namen eingeben"    !
  3237.   LET a$=a$+"(ohne Kleinbchst.,kein Pnkt,"      !
  3238.   LET a$=a$+"0=raus):"                          !
  3239.   PRINT CHR$(27);CHR$(112);                     ! invers ein
  3240.   PRINT AT(1,1);a$;                             !
  3241.   PRINT CHR$(27);CHR$(113);                     ! invers aus
  3242.   PRINT AT(LEN(a$)+2,1);                        !
  3243.   LET a$=gname$                                 ! Stückname übergeben
  3244.   FORM INPUT 8 AS a$                            !
  3245.   ' ............................................................................
  3246.   LET a$=UPPER$(a$)                             ! wandelt Kleinbuchst in Großb.
  3247.   FOR i|=1 TO LEN(a$)                           ! Namen durch
  3248.     IF MID$(a$,i|,1)="."                        ! Punkt nicht erlaubt
  3249.       MID$(a$,i|,1)="X"                         ! dito ersetzen
  3250.     ENDIF                                       !
  3251.   NEXT i|                                       !
  3252.   ' ............................................................................
  3253.   LET m|=gts|+1                                 ! erst mal vom Maximum ausgehen
  3254.   FOR i|=1 TO gts|                              ! alle Stücke durch
  3255.     IF a$=gi$(i|)                               ! f Name schon vorhanden
  3256.       LET m|=i|                                 ! entsprech. Stück überschreiben
  3257.     ENDIF                                       !
  3258.   NEXT i|                                       !
  3259.   IF m|=gts|+1 AND gts|<gm|                     ! f nix überschrieben wird:
  3260.     INC gts|                                    ! Maximum Stückanzahl erhöhen
  3261.   ELSE IF m|=gts|+1                             ! gts|=gm|,dh. Hauptfile voll:
  3262.     LET a$="Nur "+STR$(gm|)+" Stücke möglich!"  !
  3263.     LET a$=a$+"/Abbruch"                        !
  3264.     @a_alert(a$,dummy|)                         !
  3265.     GOTO raus_4_stueck_in_hauptfile_abspeichern !
  3266.   ENDIF                                         !
  3267.   ' ............................................................................
  3268.   IF a$<>"" AND a$<>"0"                         ! f nicht Abbruch gewählt:
  3269.     LET gname$=a$                               ! neuer Stückname zurück
  3270.     LET gi$(m|)=a$                              ! Stückname ins Inhaltsverz.
  3271.     LET gs$(1,m|)=ga$(1)                        ! Akt. Stück in Stückarray 1.St.
  3272.     LET gs$(2,m|)=ga$(2)                        ! Akt. Stück in Stückarray 2.St.
  3273.     @5_fileselectboxfoto(0)                     ! Hauptfileauswahlfoto
  3274.   ENDIF                                         !
  3275.   ' ............................................................................
  3276. raus_4_stueck_in_hauptfile_abspeichern:       !
  3277.   SPUT bld$                                     ! Bildschirm wiederherstellen
  3278.   ' ----------------------------------------------------------------------------
  3279. RETURN
  3280. > PROCEDURE 4_hauptfile_laden(programmstart!)
  3281.   ' ----------------------------------------------------------------------------
  3282.   LOCAL s|                                      ! Stimmzähler
  3283.   LOCAL a|                                      ! Speicher für Notencharakterist
  3284.   LOCAL n|                                      ! Stückzähler
  3285.   LOCAL dummy%                                  ! siehe Handbuch 6-49,Recall
  3286.   LOCAL i%                                      ! Notenzähler
  3287.   LOCAL name$                                   ! Dateiname
  3288.   LOCAL n$                                      ! Abk.für"
  3289.   LOCAL a$                                      ! Abk. für Stückspeicherstring
  3290.   LOCAL i$                                      ! Infostring
  3291.   ' ............................................................................
  3292.   LET i$="Gewählt: H A U P T F I L E  "         !
  3293.   LET i$=i$+" L A D E N "                       !
  3294.   LET i$=i$+" Bisher: "+ghptfle$                !
  3295.   @a_info(i$)                                   !
  3296.   @a_tastaturpuffer_leeren                      !
  3297. nochmal_h_laden_fileselect:                   ! nochmal File auswählen
  3298.   IF programmstart!                             ! f jetzt Programmstart:
  3299.     gpfad$=CHR$(65+GEMDOS(25))+":"+DIR$(0)+"\"  ! Aktuellen Pfad ermitteln
  3300.     LET name$=gpfad$+ghptfle$                   !
  3301.   ELSE                                          ! f diese Proc vom Menü ausgerfn
  3302.     FILESELECT gpfad$+"*.HFL",ghptfle$,name$    ! Fileselectbox aufrufen
  3303.     gpfad$=LEFT$(name$,RINSTR(name$,"\"))       ! Nur bis letztem Backslash
  3304.   ENDIF                                         !
  3305.   ' ............................................................................
  3306.   IF name$<>"" AND EXIST(name$)                 ! f was Existierendes ausgewählt
  3307.     ' ..........................................................................
  3308.     @5_aut_extension("HFL",name$)               !
  3309.     LET n$=name$                                !
  3310.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3311.     LET ghptfle$=n$                             !
  3312.     LET i$="Hauptfile wird geladen: "           !
  3313.     @a_info(i$+name$)                           !
  3314.     OPEN "I",#1,name$                           !
  3315.     INPUT #1,gts|                               ! Anzahl der Stücke abspeichern
  3316.     RECALL #1,gi$(),gts|+1,dummy%               ! Inhaltsverz.-Array laden |1
  3317.     FOR n|=1 TO gts|                            ! Alle Stücke durch
  3318.       FOR s|=1 TO 2                             ! Beide Stimmen durch
  3319.         LET a$=""                               !
  3320.         DO                                      ! Notenleseschleife
  3321.           EXIT IF EOF(#1)                       ! raus f Dateiende
  3322.           LET a|=INP(#1)                        ! Notencharakteristik lesen
  3323.           EXIT IF a|=255                        ! raus f Trennstrich
  3324.           LET a$=a$+CHR$(a|)                    ! Notenspeicherstring erneuern
  3325.         LOOP                                    !
  3326.         LET gs$(s|,n|)=a$                       !
  3327.       NEXT s|                                   ! nächste Stimme
  3328.     NEXT n|                                     ! nächstes Stück
  3329.     CLOSE #1                                    !
  3330.     FOR n|=gts|+1 TO gm|                        ! restliche Stücknamen durch
  3331.       LET gi$(n|)="________"                    ! Stückname für leeres Stück
  3332.     NEXT n|                                     ! nächster Stückname
  3333.     ' ..........................................................................
  3334.   ELSE IF name$<>"" AND NOT EXIST(name$)        ! f was Nicht-Existierendes ausg
  3335.     ' ..........................................................................
  3336.     @5_aut_extension("HFL",name$)               !
  3337.     LET n$=name$                                !
  3338.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3339.     LET i$="Neues Hauptfile namens "+n$+" ?"    !
  3340.     LET i$=i$+" / Ja | Nein"                    !
  3341.     @a_alert(i$,m|)                             !
  3342.     IF m|=1                                     ! f ja:
  3343.       LET gts|=0                                ! Stückanzahl Null setzen
  3344.       LET ghptfle$=n$                           ! Neuer Hauptfilename
  3345.     ELSE                                        ! f nein:
  3346.       LET programmstart!=FALSE                  ! sonst kein Fileselect
  3347.       GOTO nochmal_h_laden_fileselect           ! nochmal File auswählen
  3348.     ENDIF                                       !
  3349.     FOR n|=1 TO gm|                             ! Alle potentiellen Namen durch
  3350.       LET gi$(n|)="________"                    ! Stückname für leeres Stück
  3351.     NEXT n|                                     ! nächster Stückname
  3352.     ' ..........................................................................
  3353.   ENDIF                                         !
  3354.   ' ............................................................................
  3355.   @2_workscreen_menue_zeigen                    !
  3356.   @5_fileselectboxfoto(-1)                      ! Hauptfileauswahlfoto
  3357.   ' ----------------------------------------------------------------------------
  3358.   ' |1:         +1, weil Store schon mit 0 zu zählen beginnt, also auch
  3359.   '             gi$(0) abgespeichert wird.
  3360.   ' ----------------------------------------------------------------------------
  3361. RETURN
  3362. > PROCEDURE 5_fileselectboxfoto(bildrettungsflag!)
  3363.   ' ----------------------------------------------------------------------------
  3364.   ' Hier wird die Fileselectbox angezeigt und fotografiert. Diese Prozedur wird
  3365.   ' auch von '4_stueck_in_hauptfile_abspeichern' aus aufgerufen.
  3366.   ' ----------------------------------------------------------------------------
  3367.   LOCAL a|                                      ! Wahlvariable für Menü
  3368.   LOCAL m|                                      ! Maustastenvar. für Menü
  3369.   LOCAL c$                                      ! Bildschirmnegativ
  3370.   DIM g!(gm|)                                   ! Boolearray für Menü
  3371.   ' ............................................................................
  3372.   IF bildrettungsflag!                          !
  3373.     SGET c$                                     ! Bildschirm retten
  3374.   ENDIF                                         !
  3375.   ' ............................................................................
  3376.   DEFFILL 1,2,4                                 ! Bildsch so wie hinter Gem-Menü
  3377.   BOUNDARY 0                                    ! Umrahmung ausschalten
  3378.   PBOX 0,0,639,399                              ! Füllen
  3379.   BOUNDARY 1                                    ! Umrahmung einschalten
  3380.   DEFFILL 1,2,8                                 ! Füllmuster wieder schwarz
  3381.   @2_workscreen_menue_zeigen                    !
  3382.   @m(0,-1,0,0,0,0,-1,4,4,8,20,m|,a|,gi$(),g!()) ! Menüprozedur aufrufen
  3383.   SGET gfsb$                                    ! Fileselectbox fotografieren
  3384.   ' ............................................................................
  3385.   IF bildrettungsflag!                          !
  3386.     SPUT c$                                     ! Bildschirm wieder herstellen
  3387.   ENDIF                                         !
  3388.   ERASE g!()                                    ! Boolearray für Menü
  3389.   ' ----------------------------------------------------------------------------
  3390. RETURN
  3391. > PROCEDURE 4_hauptfile_abspeichern
  3392.   ' ----------------------------------------------------------------------------
  3393.   LOCAL ok!                                     ! Diskspeicherfrageflag
  3394.   LOCAL s|                                      ! Stimmzähler
  3395.   LOCAL n|                                      ! Stückzähler
  3396.   LOCAL i%                                      ! Notenzähler
  3397.   LOCAL p%                                      ! Platz
  3398.   LOCAL name$                                   ! Dateiname
  3399.   LOCAL n$                                      ! Abk.für"
  3400.   LOCAL a$                                      ! Abk. für Stückspeicherstring
  3401.   LOCAL i$                                      ! Infostring
  3402.   ' ............................................................................
  3403.   LET i$="Gewählt: H A U P T F I L E  "         !
  3404.   LET i$=i$+" A B S P E I C H E R N "           !
  3405.   LET i$=i$+" Bisher: "+ghptfle$                !
  3406.   @a_info(i$)                                   !
  3407.   @a_tastaturpuffer_leeren                      !
  3408.   ' ............................................................................
  3409.   REPEAT                                        !
  3410.     FILESELECT gpfad$+"*.HFL",ghptfle$,name$    ! Fileselectbox aufrufen
  3411.     gpfad$=LEFT$(name$,RINSTR(name$,"\"))       ! Nur bis letztem Backslash
  3412.     FOR i|=1 TO gm|                             ! Alle Stücke durch
  3413.       LET p%=p%+LEN(gs$(1,i|))+LEN(gs$(2,i|))   ! Stückplatzerrechnen
  3414.     NEXT i|                                     !
  3415.     LET p%=p%+gm|*8+10                          ! Inhverz. + Sicherheitsraum
  3416.     IF EXIST(name$)                             !
  3417.       KILL name$                                !
  3418.     ENDIF                                       !
  3419.     @5_diskplatz(name$,p%,ok!)                  ! Genügend Diskettenspeicher ?
  3420.   UNTIL ok! OR name$=""                         !
  3421.   ' ............................................................................
  3422.   IF name$<>""                                  ! f was ausgewählt:
  3423.     ' ..........................................................................
  3424.     @5_aut_extension("HFL",name$)               !
  3425.     LET n$=name$                                !
  3426.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3427.     LET ghptfle$=n$                             !
  3428.     LET i$="Hauptfile wird gespeichert unter "  !
  3429.     @a_info(i$+name$)                           !
  3430.     OPEN "O",#1,name$                           !
  3431.     PRINT #1,gts|                               ! Anzahl der Stücke abspeichern
  3432.     STORE #1,gi$(),gts|+1                       ! Inhaltsverz.-Array absp. |1
  3433.     FOR n|=1 TO gts|                            ! Alle Stücke durch
  3434.       FOR s|=1 TO 2                             ! Beide Stimmen durch
  3435.         LET a$=gs$(s|,n|)                       ! Stimme des akt. Stücks abk.
  3436.         FOR i%=1 TO LEN(a$)                     ! Alle Noten einer Stimme durch
  3437.           OUT #1,ASC(MID$(a$,i%,1))             ! Notencharakteristik raus
  3438.         NEXT i%                                 ! nächste Note
  3439.         OUT #1,255                              ! Trennung zw. den den 2 Stimmen
  3440.       NEXT s|                                   ! nächste Stimme
  3441.     NEXT n|                                     ! nächstes Stück
  3442.     OUT #1,255                                  ! Trennung zw. 2 Stücken
  3443.     CLOSE #1                                    !
  3444.     ' ..........................................................................
  3445.   ENDIF                                         !
  3446.   ' ............................................................................
  3447.   @2_workscreen_menue_zeigen                    !
  3448.   ' ----------------------------------------------------------------------------
  3449.   ' |1:         +1, weil Store schon mit 0 zu zählen beginnt, also auch
  3450.   '             gi$(0) abgespeichert wird.
  3451.   ' ----------------------------------------------------------------------------
  3452. RETURN
  3453. > PROCEDURE 4_bestimmte_stuecke_loeschen
  3454.   ' ----------------------------------------------------------------------------
  3455.   LOCAL a|                                      ! Wahlvariable für Menü
  3456.   LOCAL m|                                      ! Maustastenvar. für Menü
  3457.   LOCAL i|                                      ! Stückzähler
  3458.   LOCAL i$                                      ! Infostring
  3459.   LOCAL c$                                      ! Bildschirmnegativ
  3460.   DIM g!(gm|)                                   ! Boolearray für Menü
  3461.   ' ............................................................................
  3462.   SGET c$                                       ! Bildschirm retten
  3463.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  3464.   LET i$="Gewählt: bestimmte Stücke löschen."   !
  3465.   LET i$=i$+" Aktuell: "+gname$                 ! aktuellen Stücknamen dazu
  3466.   @a_info(i$)                                   !
  3467.   @a_tastaturpuffer_leeren                      !
  3468.   ' ............................................................................
  3469.   @m(0,0,-1,0,-1,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  3470.   ' ............................................................................
  3471.   LET i$="... es wird gelöscht ..."             !
  3472.   @a_info(i$)                                   !
  3473.   REPEAT                                        ! Alle Stücke im Hauptfile durch
  3474.     INC i|                                      !
  3475.     IF g!(i|)                                   ! f Stück ausgewählt:
  3476.       @5_einzelnes_stueck_loeschen(i|,g!())     ! |1
  3477.       DEC i|                                    ! sonstüberspringen wir neues i|
  3478.     ENDIF                                       !
  3479.   UNTIL i|>=gts| OR gts|=0                      ! nächstes Stück
  3480.   ' ............................................................................
  3481.   ERASE g!()                                    ! Boolearray für Menü
  3482.   @5_fileselectboxfoto(0)                       ! Hauptfileauswahlfoto
  3483.   SPUT c$                                       ! Bildschirm wieder herstellen
  3484.   ' ----------------------------------------------------------------------------
  3485.   ' |1:         Auch im Boole-Array, der die löschenden Stücke kennzeichnet,
  3486.   '             muß ja die entsprechende Zeile gelöscht werden.
  3487.   ' ----------------------------------------------------------------------------
  3488. RETURN
  3489. > PROCEDURE 5_einzelnes_stueck_loeschen(a|,VAR g!())
  3490.   ' ----------------------------------------------------------------------------
  3491.   LOCAL j|                                      ! Stückzähler
  3492.   ' ............................................................................
  3493.   FOR j|=a| TO gts|                             ! Stücke durch ab a| bis Ende-1
  3494.     IF j|<gm|                                   ! f < 160
  3495.       LET gi$(j|)=gi$(j|+1)                     ! akt.mit nächstem St.überschr.
  3496.       LET gs$(1,j|)=gs$(1,j|+1)                 ! " 1. Stimme
  3497.       LET gs$(2,j|)=gs$(2,j|+1)                 ! " 2. Stimme
  3498.       LET g!(j|)=g!(j|+1)                       !
  3499.     ELSE                                        !
  3500.       LET gi$(gm|)="________"                   ! sonst letzter Stückname dopplt
  3501.       LET g!(gm|)=FALSE                         !
  3502.     ENDIF                                       !
  3503.   NEXT j|                                       ! nächstes Stück
  3504.   ' ............................................................................
  3505.   DEC gts|                                      ! Anzahl der Stücke 1 weniger
  3506.   ' ----------------------------------------------------------------------------
  3507. RETURN
  3508. > PROCEDURE 4_zweites_hauptfile_laden
  3509.   ' ----------------------------------------------------------------------------
  3510.   LOCAL s|                                      ! Stimmzähler
  3511.   LOCAL a|                                      ! Speicher für Notencharakterist
  3512.   LOCAL n|                                      ! Stückzähler
  3513.   LOCAL d|                                      ! Dummy
  3514.   LOCAL dummy%                                  ! siehe Handbuch 6-49,Recall
  3515.   LOCAL i%                                      ! Notenzähler
  3516.   LOCAL name$                                   ! Dateiname
  3517.   LOCAL n$                                      ! Abk.für"
  3518.   LOCAL a$                                      ! Abk. für Stückspeicherstring
  3519.   LOCAL i$                                      ! Infostring
  3520.   ' ............................................................................
  3521.   LET i$="Gewählt: 2. H A U P T F I L E  "      !
  3522.   LET i$=i$+" L A D E N "                       !
  3523.   LET i$=i$+" Bisher: "+ghptfle2$               !
  3524.   @a_info(i$)                                   !
  3525.   @a_tastaturpuffer_leeren                      !
  3526. nochmal_h_2laden_fileselect:                  ! nochmal File auswählen
  3527.   FILESELECT gpfad$+"*.HFL",ghptfle2$,name$     ! Fileselectbox aufrufen
  3528.   gpfad$=LEFT$(name$,RINSTR(name$,"\"))         ! Nur bis letztem Backslash
  3529.   ' ............................................................................
  3530.   IF name$<>"" AND EXIST(name$)                 ! f was Existierendes ausgewählt
  3531.     ' ..........................................................................
  3532.     @5_aut_extension("HFL",name$)               !
  3533.     LET n$=name$                                !
  3534.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3535.     LET ghptfle2$=n$                            !
  3536.     LET i$="2.Hauptfile wird geladen: "         !
  3537.     @a_info(i$+name$)                           !
  3538.     OPEN "I",#1,name$                           !
  3539.     INPUT #1,gts2|                              ! Anzahl der Stücke abspeichern
  3540.     RECALL #1,gi2$(),gts2|+1,dummy%             ! Inhaltsverz.-Array laden |1
  3541.     FOR n|=1 TO gts2|                           ! Alle Stücke durch
  3542.       FOR s|=1 TO 2                             ! Beide Stimmen durch
  3543.         LET a$=""                               !
  3544.         DO                                      ! Notenleseschleife
  3545.           EXIT IF EOF(#1)                       ! raus f Dateiende
  3546.           LET a|=INP(#1)                        ! Notencharakteristik lesen
  3547.           EXIT IF a|=255                        ! raus f Trennstrich
  3548.           LET a$=a$+CHR$(a|)                    ! Notenspeicherstring erneuern
  3549.         LOOP                                    !
  3550.         IF FRE(0)>LEN(a$)                       ! f noch RAM-Speicher:
  3551.           LET gs2$(s|,n|)=a$                    !
  3552.         ELSE                                    !
  3553.           @a_alert("Zu wenig Speicher!/OK!",d|) !
  3554.           LET n|=gts2|                          ! auch aus 2.Schleife raus
  3555.           EXIT IF TRUE                          ! raus
  3556.         ENDIF                                   !
  3557.       NEXT s|                                   ! nächste Stimme
  3558.     NEXT n|                                     ! nächstes Stück
  3559.     CLOSE #1                                    !
  3560.     FOR n|=gts2|+1 TO gm|                       ! restliche Stücknamen durch
  3561.       LET gi2$(n|)="________"                   ! Stückname für leeres Stück
  3562.     NEXT n|                                     ! nächster Stückname
  3563.     ' ..........................................................................
  3564.   ELSE IF name$<>"" AND NOT EXIST(name$)        ! f was Nicht-Existierendes ausg
  3565.     ' ..........................................................................
  3566.     @5_aut_extension("HFL",name$)               !
  3567.     LET n$=name$                                !
  3568.     LET n$=RIGHT$(n$,LEN(n$)-RINSTR(n$,"\"))    ! Nur ab letztem Backslash
  3569.     LET i$="Neues 2.Hauptfile namens "+n$+" ?"  !
  3570.     LET i$=i$+" / Ja | Nein"                    !
  3571.     @a_alert(i$,m|)                             !
  3572.     IF m|=1                                     ! f ja:
  3573.       LET gts2|=0                               ! Stückanzahl Null setzen
  3574.       LET ghptfle2$=n$                          ! Neuer Hauptfilename
  3575.     ELSE                                        ! f nein:
  3576.       LET programmstart!=FALSE                  ! sonst kein Fileselect
  3577.       GOTO nochmal_h_2laden_fileselect          ! nochmal File auswählen
  3578.     ENDIF                                       !
  3579.     FOR n|=1 TO gm|                             ! Alle potentiellen Namen durch
  3580.       LET gi2$(n|)="________"                   ! Stückname für leeres Stück
  3581.     NEXT n|                                     ! nächster Stückname
  3582.     ' ..........................................................................
  3583.   ENDIF                                         !
  3584.   ' ............................................................................
  3585.   @2_workscreen_menue_zeigen                    !
  3586.   ' ----------------------------------------------------------------------------
  3587.   ' |1:         +1, weil Store schon mit 0 zu zählen beginnt, also auch
  3588.   '             gi$(0) abgespeichert wird.
  3589.   ' ----------------------------------------------------------------------------
  3590. RETURN
  3591. > PROCEDURE 4_erstes_u_zweites_hauptfile_vertauschen
  3592.   ' ----------------------------------------------------------------------------
  3593.   SWAP gs2$(),gs$()                             !
  3594.   SWAP gi2$(),gi$()                             !
  3595.   SWAP gts2|,gts|                               !
  3596.   SWAP ghptfle2$,ghptfle$                       !
  3597.   ' ............................................................................
  3598.   @2_workscreen_menue_zeigen                    !
  3599.   @5_fileselectboxfoto(-1)                      ! Hauptfileauswahlfoto
  3600.   ' ----------------------------------------------------------------------------
  3601. RETURN
  3602. > PROCEDURE 4_best_stuecke_ins_zweite_hptfle_kop
  3603.   ' ----------------------------------------------------------------------------
  3604.   LOCAL i|                                      ! Stückzähler
  3605.   LOCAL a|                                      ! Wahlvariable für Menü
  3606.   LOCAL m|                                      ! Maustastenvar. für Menü
  3607.   LOCAL n%                                      ! Tastencode
  3608.   LOCAL c$                                      ! Bildschirmnegativ
  3609.   LOCAL i$                                      ! Infostring
  3610.   DIM g!(gm|)                                   ! Boolearray für Menü
  3611.   ' ............................................................................
  3612.   SGET c$                                       ! Bildschirm retten
  3613.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  3614.   ' ............................................................................
  3615.   LET i$="Gewählt: best. Stücke ins "           !
  3616.   LET i$=i$+"2.Hauptfile kop."                  !
  3617.   LET i$=i$+" Von "+ghptfle$+" nach "           !
  3618.   LET i$=i$+ghptfle2$                           !
  3619.   @a_info(i$)                                   !
  3620.   @a_tastaturpuffer_leeren                      !
  3621.   ' ............................................................................
  3622.   @m(0,0,-1,0,-1,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  3623.   SPUT c$                                       ! Bildschirm wieder herstellen
  3624.   ' ............................................................................
  3625.   FOR i|=1 TO gts|                              ! Alle Stücke im Hauptfile durch
  3626.     IF g!(i|)                                   ! f Stück ausgewählt:
  3627.       @5_einzelkopie(i|)                        !
  3628.     ENDIF                                       !
  3629.     KEYLOOK n%                                  ! Taste anschauen
  3630.     EXIT IF n%=65563                            ! Raus falls Escape-Taste
  3631.   NEXT i|                                       ! nächstes Stück
  3632.   ' ............................................................................
  3633.   SPUT c$                                       ! Bildschirm wieder herstellen
  3634.   ERASE g!()                                    ! Boolearray für Menü
  3635.   ' ----------------------------------------------------------------------------
  3636. RETURN
  3637. > PROCEDURE 5_einzelkopie(nr|)
  3638.   ' ----------------------------------------------------------------------------
  3639.   IF gts2|<gm|                                  !
  3640.     INC gts2|                                   ! Stückzähler 2.Hptfle erhöhen
  3641.     LET gs2$(1,gts2|)=gs$(1,nr|)                ! 1.Stimme kopieren
  3642.     LET gs2$(2,gts2|)=gs$(2,nr|)                ! 2.Stimme kopieren
  3643.     LET gi2$(gts2|)=gi$(nr|)                    ! Inhaltsverzeichnis aktualis.
  3644.   ENDIF                                         !
  3645.   ' ----------------------------------------------------------------------------
  3646. RETURN
  3647. > PROCEDURE 4_file_loeschen
  3648.   ' ----------------------------------------------------------------------------
  3649.   LOCAL a|                                      ! für Alertbox
  3650.   LOCAL i$                                      ! Infostring
  3651.   LOCAL m$                                      ! Speicher für Filename
  3652.   LOCAL kl$                                     ! Klaviaturnegativ
  3653.   ' ............................................................................
  3654.   LET i$="Gewählt: File löschen!"               ! Info über gewählten Befehl
  3655.   PRINT AT(1,1);i$+SPACE$(80-LEN(i$))           !
  3656.   ' ............................................................................
  3657. nochmal_file_loeschen:                        ! Wiederhol-Label
  3658.   FILESELECT gpfad$+"*.*",m$,m$                 ! Fileselectbox aufrufen
  3659.   gpfad$=LEFT$(m$,RINSTR(m$,"\"))               ! Nur bis letztem Backslash
  3660.   ' ............................................................................
  3661.   IF m$="" OR NOT EXIST(m$)                     ! F Abbruch gewählt:
  3662.     GOTO raus_file_loeschen                     !
  3663.   ENDIF                                         !
  3664.   IF LEN(m$)>12                                 ! F Name samt Pfad länger als 12
  3665.     LET i$="Gelöscht wird: '"                   ! Menütext
  3666.     LET i$=i$+RIGHT$(m$,12)+"'!/ok!|raus!"      !
  3667.     @a_alert(i$,a|)                             !
  3668.   ELSE                                          !
  3669.     LET i$="Gelöscht wird: '"+m$+"'!/ok!|raus!" !
  3670.     @a_alert(i$,a|)                             !
  3671.   ENDIF                                         !
  3672.   IF a|=2                                       ! F Abbruch gewählt:
  3673.     GOTO raus_file_loeschen                     !
  3674.   ENDIF                                         !
  3675.   PRINT AT(30,1);"'";m$;"'           "          ! Anzeige des Namens mit pfad
  3676.   ' ............................................................................
  3677.   KILL m$                                       !
  3678.   ' ............................................................................
  3679.   GOTO nochmal_file_loeschen                    ! Kreislauf, f viel gelöscht
  3680.   ' ............................................................................
  3681. raus_file_loeschen:                           !
  3682.   ' ----------------------------------------------------------------------------
  3683. RETURN
  3684. > PROCEDURE 4_rename_file
  3685.   ' ----------------------------------------------------------------------------
  3686.   ' Hier wird ein File auf der Diskette umbenannt.
  3687.   ' ----------------------------------------------------------------------------
  3688.   LOCAL ok!                                     ! Flag für Prüfprozedur
  3689.   LOCAL a|                                      ! für Alertbox
  3690.   LOCAL i$                                      ! Info
  3691.   LOCAL m$                                      ! Speicher für Filename
  3692.   LOCAL neu$                                    ! Speicher für neuen Namen
  3693.   ' ............................................................................
  3694.   LET i$="Gewählt: File umbenennen! Jetzt: Um"  !
  3695.   LET i$=i$+"zubenennendes File anwählen!"      ! Info über gewählten Befehl
  3696.   PRINT AT(1,1);i$;                             !
  3697.   ' ............................................................................
  3698.   FILESELECT gpfad$+"*.*",m$,m$                 ! Fileselectbox aufrufen
  3699.   gpfad$=LEFT$(m$,RINSTR(m$,"\"))               ! Nur bis letztem Backslash
  3700.   ' ............................................................................
  3701.   IF m$="" OR NOT EXIST(m$)                     ! F Abbruch gewählt:
  3702.     GOTO raus_rename_file                       !
  3703.   ENDIF                                         !
  3704.   ' ............................................................................
  3705.   @5_eingabe_name(neu$)                         ! Neuen Namen eingeben
  3706.   ' ............................................................................
  3707.   LET neu$=LEFT$(m$,RINSTR(m$,"\"))+neu$        ! Pfad der gleiche wie bei m$
  3708.   LET i$="Geändert wird: |'"+m$+"'|zu: |'"      ! Menütext
  3709.   LET i$=i$+neu$+"'/ok!|raus!"                  !
  3710.   @a_alert(i$,a|)                               !
  3711.   IF a|=2                                       ! F Abbruch gewählt:
  3712.     GOTO raus_rename_file                       !
  3713.   ENDIF                                         !
  3714.   LET i$="Jetzt wird umbenannt:  alt:'"+m$      !
  3715.   LET i$=i$+"' neu:'"+neu$+"'"                  !
  3716.   PRINT AT(1,1);i$                              !
  3717.   ' ............................................................................
  3718.   RENAME m$ AS neu$                             ! File umbenennen
  3719.   ' ............................................................................
  3720. raus_rename_file:                             !
  3721.   ' ----------------------------------------------------------------------------
  3722. RETURN
  3723. > PROCEDURE 5_eingabe_name(VAR x$)
  3724.   ' ----------------------------------------------------------------------------
  3725.   ' x$                                          ! Speicher für neuen Namen
  3726.   LOCAL i$                                      ! Info
  3727.   ' ............................................................................
  3728. nochmal_name_eingeben:                        ! Wiederhol-Label
  3729.   ' ............................................................................
  3730.   REPEAT                                        ! Maus- und Tastaturpuffer
  3731.   UNTIL MOUSEK=0 AND INKEY$=""                  ! entleeren.
  3732.   PRINT AT(1,1);SPACE$(80)                      ! 1. Zeile leer
  3733.   PRINT AT(1,1);                                ! Cursor positionieren
  3734.   LET i$=" Neuer Name: (Ohne Pfad [Bsp.: "      !
  3735.   LET i$=i$+"'NOTEDITA.PRG']) "                 ! Info Input platz.
  3736.   PRINT i$;                                     !
  3737.   ' ............................................................................
  3738.   INPUT x$                                      ! Eingabe des neuen Namens
  3739.   IF x$="0"                                     ! F Abbruch gewählt:
  3740.     GOTO raus_name_eingeben                     !
  3741.   ENDIF                                         !
  3742.   ' ............................................................................
  3743.   @6_pruef(x$,ok!)                              ! Überprüfung der Eingabe
  3744.   IF NOT ok!                                    ! F nicht ok:
  3745.     IF LEN(x$)>12                               ! F zu lang
  3746.       LET x$=LEFT$(x$,12)                       ! zurechtstutzen
  3747.     ENDIF                                       !
  3748.     LET i$="'"+x$+"' ist unmöglicher Dateiname" !
  3749.     LET i$=i$+"'"+x$+"!/nochmal!|raus!"         !
  3750.     @a_alert(i$,a|)                             !
  3751.     IF a|=1                                     ! F Einsicht:
  3752.       GOTO nochmal_name_eingeben                !
  3753.     ELSE                                        ! F Abbruch gewünscht:
  3754.       GOTO raus_name_eingeben                   !
  3755.     ENDIF                                       !
  3756.   ENDIF                                         !
  3757.   ' ............................................................................
  3758. raus_name_eingeben:                           !
  3759.   ' ----------------------------------------------------------------------------
  3760. RETURN
  3761. > PROCEDURE 6_pruef(n$,VAR o!)
  3762.   ' ----------------------------------------------------------------------------
  3763.   ' Hier wird geprüft ob in n$ ein brauchbarer Dateiname steht.
  3764.   ' ----------------------------------------------------------------------------
  3765.   ' n$                                          ! zu überprüfender Dateiname
  3766.   ' o!                                          ! =-1 falls Dateiname ok
  3767.   LOCAL fehler!                                 ! Flag für 'Fehler gefunden'
  3768.   LOCAL i|                                      ! Zähler für Zeichen
  3769.   LOCAL asc|                                    ! Ascii-Wert des akt. Zeichens
  3770.   LOCAL ext$                                    ! Extension
  3771.   LOCAL name$                                   ! Filename ohne Extension
  3772.   LOCAL pkt$                                    ! Punkt zw. Filename und Ext.
  3773.   ' ............................................................................
  3774.   '                                             ! Dateiname z.B.'NAME.EXT'
  3775.   ' ............................................................................
  3776.   IF LEN(n$)<5                                  ! mind.:'.EXT' + ein Zeichen
  3777.     LET fehler!=TRUE                            ! Fehler gefunden
  3778.     GOTO raus_pruef                             !
  3779.   ENDIF                                         !
  3780.   ' ............................................................................
  3781.   LET ext$=RIGHT$(n$,3)                         ! Extension ausschneiden
  3782.   LET name$=LEFT$(n$,LEN(n$)-4)                 ! Name ausschneiden
  3783.   LET pkt$=LEFT$(RIGHT$(n$,4),1)                ! Punkt ausschneiden
  3784.   ' ............................................................................
  3785.   IF pkt$<>"."                                  ! F hier kein Punkt zu sehen:
  3786.     LET fehler!=TRUE                            ! Fehler gefunden
  3787.     GOTO raus_pruef                             !
  3788.   ENDIF                                         !
  3789.   ' ............................................................................
  3790.   FOR i|=1 TO LEN(name$)                        ! Name durch
  3791.     LET asc|=ASC(MID$(name$,i|,1))              ! Ascci-wert festhalten
  3792.     IF asc|<65 OR asc|>90                       ! F außerhalb großer Buchstaben
  3793.       IF NOT (asc|>47 AND asc|<58)              ! F keine Ziffer:
  3794.         LET fehler!=TRUE                        ! Fehler gefunden
  3795.       ENDIF                                     !
  3796.     ENDIF                                       !
  3797.   NEXT i|                                       ! nächster Buchstabe des Namens
  3798.   ' ............................................................................
  3799.   FOR i|=1 TO LEN(ext$)                         ! Extension durch
  3800.     LET asc|=ASC(MID$(ext$,i|,1))               ! Ascci-wert festhalten
  3801.     IF asc|<65 OR asc|>91                       ! F außerhalb großer Buchstaben
  3802.       IF NOT (asc|>47 AND asc|<58)              ! F keine Ziffer:
  3803.         LET fehler!=TRUE                        ! Fehler gefunden
  3804.       ENDIF                                     !
  3805.     ENDIF                                       !
  3806.   NEXT i|                                       ! nächster Buchstabe des Ext.
  3807.   ' ............................................................................
  3808. raus_pruef:                                   !
  3809.   IF NOT fehler!                                ! F keinen Fehler gefunden
  3810.     LET o!=TRUE                                 ! Rückgabepar auf 'Alles ok'
  3811.   ENDIF                                         !
  3812.   ' ----------------------------------------------------------------------------
  3813. RETURN
  3814. ' ..............................................................................
  3815. > PROCEDURE 4_midi_ein_ausschalten                        !  A R B E I T E N
  3816.   ' ----------------------------------------------------------------------------
  3817.   IF gmidi!                                     !
  3818.     LET gmidi!=FALSE                            !
  3819.   ELSE                                          !
  3820.     LET gmidi!=TRUE                             !
  3821.   ENDIF                                         !
  3822.   ' ----------------------------------------------------------------------------
  3823. RETURN
  3824. > PROCEDURE 4_notencode_ausschalten
  3825.   ' ----------------------------------------------------------------------------
  3826.   IF gnotencode!                                !
  3827.     LET gnotencode!=FALSE                       !
  3828.   ELSE                                          !
  3829.     LET gnotencode!=TRUE                        !
  3830.   ENDIF                                         !
  3831.   ' ----------------------------------------------------------------------------
  3832. RETURN
  3833. > PROCEDURE 4_taktschlagzeug_ausschalten
  3834.   ' ----------------------------------------------------------------------------
  3835.   IF gtaktschl!                                 !
  3836.     LET gtaktschl!=FALSE                        !
  3837.   ELSE                                          !
  3838.     LET gtaktschl!=TRUE                         !
  3839.   ENDIF                                         !
  3840.   ' ----------------------------------------------------------------------------
  3841. RETURN
  3842. > PROCEDURE 4_gebundenzeichen_setzen_loeschen
  3843.   ' ----------------------------------------------------------------------------
  3844.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  3845.   ' ............................................................................
  3846.   LET a|=ASC(MID$(ga$(gs|),gc%,1))              ! Notencharakteristik Abkürzen
  3847.   IF a|<>26 AND a|<>26+32                       ! f nicht Pause
  3848.     LET a|=BCHG(a|,7)                           ! Gebundenzeichenflag ändern
  3849.     MID$(ga$(gs|),gc%,1)=CHR$(a|)               ! Änderung abspeichern
  3850.     @2_cursor_neu_setzen(gc%,0,gs|)             !
  3851.   ENDIF                                         !
  3852.   ' ----------------------------------------------------------------------------
  3853. RETURN
  3854. > PROCEDURE 4_unt_klav_setzen_loeschen
  3855.   ' ----------------------------------------------------------------------------
  3856.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  3857.   ' ............................................................................
  3858.   LET a|=ASC(MID$(ga$(gs|),gc%,1))              ! Notencharakteristik Abkürzen
  3859.   IF a|<>26 AND a|<>26+32                       ! f nicht Pause
  3860.     LET a|=BCHG(a|,6)                           ! Untere_klaviatur_flag ändern
  3861.     MID$(ga$(gs|),gc%,1)=CHR$(a|)               ! Änderung abspeichern
  3862.     @2_cursor_neu_setzen(gc%,0,gs|)             !
  3863.   ENDIF                                         !
  3864.   ' ----------------------------------------------------------------------------
  3865. RETURN
  3866. > PROCEDURE 4_taktstrich_setzen_loeschen
  3867.   ' ----------------------------------------------------------------------------
  3868.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  3869.   ' ............................................................................
  3870.   LET a|=ASC(MID$(ga$(gs|),gc%,1))              ! Notencharakteristik Abkürzen
  3871.   LET a|=BCHG(a|,5)                             ! Taktstrichflag ändern
  3872.   MID$(ga$(gs|),gc%,1)=CHR$(a|)                 ! Änderung abspeichern
  3873.   @2_cursor_neu_setzen(gc%,0,gs|)               !
  3874.   ' ----------------------------------------------------------------------------
  3875. RETURN
  3876. > PROCEDURE 4_basistonlaenge_veraendern
  3877.   ' ----------------------------------------------------------------------------
  3878.   LOCAL a$                                      ! Text
  3879.   ' ............................................................................
  3880.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile löschen
  3881.   ' ............................................................................
  3882.   LET a$="Gewählt: Neue Basistonlänge (Normal"  !
  3883.   LET a$=a$+"=13,0=Abbruch): "                  !
  3884.   ' ............................................................................
  3885.   PRINT CHR$(27);CHR$(112);                     ! invers ein
  3886.   PRINT AT(1,1);a$;                             !
  3887.   PRINT CHR$(27);CHR$(113);                     ! invers aus
  3888.   PRINT AT(LEN(a$)+2,1);gbasistonlaenge|        !
  3889.   PRINT AT(LEN(a$)+2,1);                        !
  3890.   ' ............................................................................
  3891.   INPUT gbasistonlaenge|                        !
  3892.   ' ----------------------------------------------------------------------------
  3893. RETURN
  3894. > PROCEDURE 4_bestimmte_stuecke_spielen
  3895.   ' ----------------------------------------------------------------------------
  3896.   LOCAL i|                                      ! Stückzähler
  3897.   LOCAL a|                                      ! Wahlvariable für Menü
  3898.   LOCAL m|                                      ! Maustastenvar. für Menü
  3899.   LOCAL n%                                      ! Tastencode
  3900.   LOCAL c$                                      ! Bildschirmnegativ
  3901.   LOCAL i$                                      ! Infostring
  3902.   DIM g!(gm|)                                   ! Boolearray für Menü
  3903.   ' ............................................................................
  3904.   SGET c$                                       ! Bildschirm retten
  3905.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  3906.   @2_workscreen_menue_zeigen                    !
  3907.   ' ............................................................................
  3908.   LET i$="Gewählt: bestimmte Stücke spielen. "  !
  3909.   @a_info(i$+gname$)                            !
  3910.   @a_tastaturpuffer_leeren                      !
  3911.   ' ............................................................................
  3912.   @m(0,0,-1,0,-1,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  3913.   SPUT c$                                       ! Bildschirm wieder herstellen
  3914.   FOR i|=1 TO gts|                              ! Alle Stücke im Hauptfile durch
  3915.     IF g!(i|)                                   ! f Stück ausgewählt:
  3916.       @5_einzelnes_stueck_spielen(i|)           !
  3917.     ENDIF                                       !
  3918.     KEYLOOK n%                                  ! Taste anschauen
  3919.     EXIT IF n%=65563                            ! Raus falls Escape-Taste
  3920.   NEXT i|                                       ! nächstes Stück
  3921.   ' ............................................................................
  3922.   SPUT c$                                       ! Bildschirm wieder herstellen
  3923.   ERASE g!()                                    ! Boolearray für Menü
  3924.   ' ----------------------------------------------------------------------------
  3925. RETURN
  3926. > PROCEDURE 5_einzelnes_stueck_spielen(nr|)
  3927.   ' ----------------------------------------------------------------------------
  3928.   LOCAL mga1$,mga2$                             ! Akt. Stück retten
  3929.   LOCAL mgname$                                 ! Namen des akt. Stücks retten
  3930.   LOCAL t$                                      ! Text
  3931.   LOCAL mgs|                                    ! akt. Stimmennummer retten
  3932.   LOCAL mgc%                                    ! akt. Cursorposition retten
  3933.   ' ............................................................................
  3934.   LET mga1$=ga$(1)                              ! akt. Stück, 1. Stimme retten
  3935.   LET mga2$=ga$(2)                              ! akt. Stück, 2. Stimme retten
  3936.   LET mgname$=gname$                            ! akt. Stück, Namen retten
  3937.   LET mgs|=gs|                                  ! akt. Stimmennummer retten
  3938.   LET mgc%=gc%                                  ! akt. Cursorposition retten
  3939.   ' ............................................................................
  3940.   LET ga$(1)=gs$(1,nr|)                         ! zu spielendes Stück übergeben
  3941.   LET ga$(2)=gs$(2,nr|)                         ! zu spielendes Stück übergeben
  3942.   LET gname$=gi$(nr|)                           ! Namen übergeben
  3943.   LET gs|=1                                     ! gehnwermalvonder1.Stimme aus
  3944.   ' ............................................................................
  3945.   @5_neues_stueck_zeigen                        !
  3946.   LET t$=gname$+" Nr.: "+STR$(nr|)              ! Auch Stücknummer zeigen
  3947.   @2_notenabspielen(1,LEN(ga$(1)),8,t$)         ! 8=zweistimmig
  3948.   ' ............................................................................
  3949.   LET ga$(1)=mga1$                              ! akt. Stück, 1.St. wiederherst.
  3950.   LET ga$(2)=mga2$                              ! akt. Stück, 2.St. wiederherst.
  3951.   LET gname$=mgname$                            ! akt. Stück, Namen wiederherst.
  3952.   LET gs|=mgs|                                  ! akt. Stimmennummer wiederher.
  3953.   LET gc%=mgc%                                  ! akt. Cursorposition wiederher.
  3954.   ' ............................................................................
  3955.   @1_ton_aus                                    !
  3956.   @6_stuecknummer_in_toenen_codieren(nr|)       !
  3957.   ' ----------------------------------------------------------------------------
  3958. RETURN
  3959. > PROCEDURE 6_stuecknummer_in_toenen_codieren(nr|)
  3960.   ' ----------------------------------------------------------------------------
  3961.   LOCAL i|                                      ! Ziffernzähler
  3962.   LOCAL nr$                                     ! Zifferstring
  3963.   LOCAL c$                                      ! Codierungsstring für 3 Noten
  3964.   ' ............................................................................
  3965.   IF NOT gnotencode!                            !
  3966.     GOTO raus_ton_codierung                     !
  3967.   ENDIF                                         !
  3968.   ' ............................................................................
  3969.   LET gk1|=17                                   ! Sound Kanal 1 Metallic sound
  3970.   LET gk2|=17                                   ! Sound Kanal 2 Metallic sound
  3971.   @1_midi_sounds_setzen                         !
  3972.   PAUSE 10                                      ! Pause zum letzten Stück
  3973.   ' ............................................................................
  3974.   LET nr$=RIGHT$("00"+STR$(nr|),3)              ! Stücknummer formatieren
  3975.   FOR i|=1 TO 3                                 ! Alle Ziffern durch
  3976.     LET c$=c$+CHR$(VAL(MID$(nr$,i|,1))+1)       ! Duedita-Codierung vornehmen
  3977.   NEXT i|                                       ! nächste Ziffer
  3978.   ' ............................................................................
  3979.   @3_einzelnote_spln(1,c$,CHR$(26),1,0)         ! Ziffer in Note codieren
  3980.   PAUSE 20                                      ! Ton aushalten
  3981.   ' ............................................................................
  3982.   @3_einzelnote_spln(1,c$,CHR$(26),2,0)         ! Ziffer in Note codieren
  3983.   PAUSE 20                                      ! Ton aushalten
  3984.   ' ............................................................................
  3985.   @3_einzelnote_spln(1,c$,CHR$(26),3,0)         ! Ziffer in Note codieren
  3986.   PAUSE 20                                      ! Ton aushalten
  3987.   ' ............................................................................
  3988.   @1_ton_aus                                    !
  3989. raus_ton_codierung:                           !
  3990.   ' ----------------------------------------------------------------------------
  3991. RETURN
  3992. > PROCEDURE 4_best_st_direkt_hintereinander_sp
  3993.   ' ----------------------------------------------------------------------------
  3994.   LOCAL i|                                      ! Stückzähler
  3995.   LOCAL a|                                      ! Wahlvariable für Menü
  3996.   LOCAL m|                                      ! Maustastenvar. für Menü
  3997.   LOCAL z|                                      ! Zahl der zu spielenden Stücke
  3998.   LOCAL n%                                      ! Tastencode
  3999.   LOCAL c$                                      ! Bildschirmnegativ
  4000.   LOCAL a1$                                     ! Speicher für großes Stück 1.St
  4001.   LOCAL a2$                                     ! Speicher für großes Stück 2.St
  4002.   LOCAL i$                                      ! Infostring
  4003.   DIM g!(gm|)                                   ! Boolearray für Menü
  4004.   ' ............................................................................
  4005.   SGET c$                                       ! Bildschirm retten
  4006.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  4007.   @2_workscreen_menue_zeigen                    !
  4008.   ' ............................................................................
  4009.   LET i$="Stücke direkt "                       !
  4010.   LET i$=i$+"hintereinander, ohne Pause und"    !
  4011.   LET i$=i$+" sichtbare Noten spielen."         !
  4012.   @a_info(i$+gname$)                            !
  4013.   ' ............................................................................
  4014.   @m(0,0,-1,0,-1,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  4015.   ' ............................................................................
  4016.   FOR i|=1 TO gts|                              ! Alle Stücke im Hauptfile durch
  4017.     EXIT IF gi$(i|)="________"                  ! leeres Stück gewählt
  4018.     IF g!(i|)                                   ! f Stück ausgewählt:
  4019.       INC z|                                    ! Zahl der zu spielenden Stücke
  4020.       LET a1$=a1$+gs$(1,i|)                     ! Großstück verlängern 1.Stimme
  4021.       LET a2$=a2$+gs$(2,i|)                     ! Großstück verlängern 2.Stimme
  4022.     ENDIF                                       !
  4023.   NEXT i|                                       ! nächstes Stück
  4024.   ' ............................................................................
  4025.   IF i|<=gm|                                    ! f Abbruch möglich
  4026.     IF gi$(i|)="________"                       ! f leeres Stück gewählt:
  4027.       GOTO r_4_best_st_direkt_hintereinander_sp !
  4028.     ENDIF                                       !
  4029.   ENDIF                                         !
  4030.   ' ............................................................................
  4031.   LET i$="Anzahl der zu spielenden Stücke: "    !
  4032.   LET i$=i$+STR$(z|)                            !
  4033.   @a_info(i$)                                   !
  4034.   FOR i%=1 TO LEN(a1$)                          ! Alle Noten des Großstücks drch
  4035.     @3_einzelnote_spln(1,a1$,a2$,i%,8)          !
  4036.     PAUSE gbasistonlaenge|                      ! Ton aushalten
  4037.     KEYLOOK n%                                  ! Taste anschauen
  4038.     EXIT IF MOUSEK=1 OR n%=65563                ! f linke Maustaste oder Esc
  4039.   NEXT i%                                       ! nächste Note Großstück
  4040.   ' ............................................................................
  4041. r_4_best_st_direkt_hintereinander_sp:         !
  4042.   ' ............................................................................
  4043.   SPUT c$                                       ! Bildschirm wieder herstellen
  4044.   ERASE g!()                                    ! Boolearray für Menü
  4045.   ' ----------------------------------------------------------------------------
  4046. RETURN
  4047. > PROCEDURE 4_alle_stuecke_ab_nr_x_spielen
  4048.   ' ----------------------------------------------------------------------------
  4049.   LOCAL i|                                      ! Stückzähler
  4050.   LOCAL n%                                      ! Tastencode
  4051.   LOCAL c$                                      ! Bildschirmnegativ
  4052.   LOCAL a$                                      ! Text
  4053.   ' ............................................................................
  4054.   SGET c$                                       ! Bildschirm retten
  4055.   ' ............................................................................
  4056.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile löschen
  4057.   LET a$="Stücknr des 1. zu spielenden"         !
  4058.   LET a$=a$+"Stücks eingeben (0=Abbruch):"      !
  4059.   PRINT CHR$(27);CHR$(112);                     ! invers ein
  4060.   PRINT AT(1,1);a$;                             !
  4061.   PRINT CHR$(27);CHR$(113);                     ! invers aus
  4062.   PRINT AT(LEN(a$)+2,1);                        !
  4063.   INPUT s|                                      ! Stücknummereingabe
  4064.   ' ............................................................................
  4065.   IF s|<>0                                      ! f was eingegeben:
  4066.     FOR i|=s| TO gts|                           ! Alle Stücke im Hauptfile durch
  4067.       @5_einzelnes_stueck_spielen(i|)           !
  4068.       KEYLOOK n%                                ! Taste anschauen
  4069.       EXIT IF n%=65563 OR MOUSEK=2              ! Raus falls Escape-Taste v RMT
  4070.     NEXT i|                                     ! nächstes Stück
  4071.   ENDIF                                         !
  4072.   ' ............................................................................
  4073.   SPUT c$                                       ! Bildschirm wieder herstellen
  4074.   ' ----------------------------------------------------------------------------
  4075. RETURN
  4076. > PROCEDURE 4_inhaltsverzeichnis_korrigieren
  4077.   ' ----------------------------------------------------------------------------
  4078.   LOCAL a|                                      ! Wahlvariable für Menü
  4079.   LOCAL m|                                      ! Maustastenvar. für Menü
  4080.   LOCAL a$                                      ! Diverse Texte
  4081.   LOCAL bld$                                    ! Bildschirm retten
  4082.   ' ...........................................................................
  4083.   SGET bld$                                     ! Bildschirm retten
  4084.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  4085.   ' ............................................................................
  4086.   DO                                            !
  4087.     ' ..........................................................................
  4088.     LET a$="Gewählt: Stücknamen ändern"         !
  4089.     @5_ein_stueck_aus_hauptfile(a$,a|,m|)       !
  4090.     EXIT IF m|=2                                ! f Abbruch gewählt: raus
  4091.     ' ..........................................................................
  4092.     PRINT AT(1,1);SPACE$(80);                   ! Menüzeile löschen
  4093.     LET a$="Stücknamen ändern "                 !
  4094.     LET a$=a$+"(ohne Kleinbuchst.,kein Punkt,"  !
  4095.     LET a$=a$+"0=raus):"                        !
  4096.     PRINT CHR$(27);CHR$(112);                   ! invers ein
  4097.     PRINT AT(1,1);a$;                           !
  4098.     PRINT CHR$(27);CHR$(113);                   ! invers aus
  4099.     PRINT AT(LEN(a$)+2,1);                      !
  4100.     LET a$=gi$(a|)                              ! Stückname übergeben
  4101.     FORM INPUT 8 AS a$                          !
  4102.     EXIT IF a$="" OR a$="0"                     ! raus f Abbruch gewählt:
  4103.     ' ..........................................................................
  4104.     LET a$=UPPER$(a$)                           ! wandelt Kleinbuchst in Großb.
  4105.     FOR i|=1 TO LEN(a$)                         ! Namen durch
  4106.       IF MID$(a$,i|,1)="."                      ! Punkt nicht erlaubt
  4107.         MID$(a$,i|,1)="X"                       ! dito ersetzen
  4108.       ENDIF                                     !
  4109.     NEXT i|                                     !
  4110.     ' ..........................................................................
  4111.     LET gi$(a|)=a$                              ! Stückname ins Inhaltsverz.
  4112.     @5_fileselectboxfoto(0)                     ! Hauptfileauswahlfoto
  4113.     ' ..........................................................................
  4114.   LOOP                                          !
  4115.   ' ............................................................................
  4116.   SPUT bld$                                     ! Bildschirm wiederherstellen
  4117.   ' ----------------------------------------------------------------------------
  4118. RETURN
  4119. > PROCEDURE 4_inhaltsverzeichnis_alph_sortieren
  4120.   ' ----------------------------------------------------------------------------
  4121.   LOCAL i|                                      ! Stückzähler
  4122.   ' ...........................................................................
  4123.   DIM s1$(gm|),s2$(gm|)                         ! Zwischenspeicher für Stückarr.
  4124.   DIM n|(gm|)                                   ! Nummerierungsarray
  4125.   ' ...........................................................................
  4126.   FOR i|=1 TO gm|                               !
  4127.     LET s1$(i|)=gs$(1,i|)                       ! 1.Stimme des i|-ten St. zw.sp.
  4128.     LET s2$(i|)=gs$(2,i|)                       ! 2.Stimme des i|-ten St. zw.sp.
  4129.     LET n|(i|)=i|                               ! Nummerierungsarray füllen
  4130.   NEXT i|                                       !
  4131.   ' ...........................................................................
  4132.   @5_sortieren(gm|,gi$(),n|())                  ! alphabetisch sortieren
  4133.   ' ...........................................................................
  4134.   FOR i|=1 TO gm|                               !
  4135.     LET gs$(1,i|)=s1$(n|(i|))                   ! 1.Stimme abspeichern
  4136.     LET gs$(2,i|)=s2$(n|(i|))                   ! 2.Stimme abspeichern
  4137.   NEXT i|                                       !
  4138.   ' ...........................................................................
  4139.   @5_fileselectboxfoto(-1)                      ! Hauptfileauswahlfoto
  4140.   ' ...........................................................................
  4141.   ERASE n|()                                    ! Nummerierungsarray
  4142.   ERASE s1$(),s2$()                             ! Zwischenspeicher für Stückarr.
  4143.   ' ----------------------------------------------------------------------------
  4144. RETURN
  4145. > PROCEDURE 5_sortieren(max|,VAR i$(),n|())
  4146.   ' ----------------------------------------------------------------------------
  4147.   LOCAL nix!                                    !
  4148.   LOCAL i|                                      !
  4149.   LOCAL zw|                                     !
  4150.   LOCAL zw$                                     !
  4151.   ' ...........................................................................
  4152.   @a_info("Jetzt wird sortiert")                !
  4153.   ' ...........................................................................
  4154.   REPEAT                                        !
  4155.     LET nix!=TRUE                               !
  4156.     FOR i|=max| DOWNTO 2                        !
  4157.       IF i$(i|)<i$(i|-1)                        ! < heißt: alph weiter vorne
  4158.         LET zw$=i$(i|-1)                        !
  4159.         LET zw|=n|(i|-1)                        !
  4160.         LET i$(i|-1)=i$(i|)                     !
  4161.         LET n|(i|-1)=n|(i|)                     !
  4162.         LET i$(i|)=zw$                          !
  4163.         LET n|(i|)=zw|                          !
  4164.         LET nix!=FALSE                          !
  4165.       ENDIF                                     !
  4166.     NEXT i|                                     !
  4167.   UNTIL nix!                                    !
  4168.   ' ----------------------------------------------------------------------------
  4169. RETURN
  4170. > PROCEDURE 4_inhaltsverz_vom_hauptfile_drucken
  4171.   ' ----------------------------------------------------------------------------
  4172.   ' Hier wird das Inhaltsverzeichnis des Hauptfiles gedruckt, mit
  4173.   ' physikalischer Stücknummer und zwar zweispaltig in Superscript.
  4174.   ' ----------------------------------------------------------------------------
  4175.   LOCAL i|                                      ! Zähler für einzelne Stücke
  4176.   LOCAL j|                                      ! Zähler für einzelne Stücke
  4177.   LOCAL anz|                                    ! Anzahl der nichtleeren Stücke
  4178.   LOCAL d%                                      ! Druckervorschublänge
  4179.   LOCAL nr$                                     ! Nummerstring
  4180.   LOCAL schirm$                                 ! Bildschirmspeichervariable
  4181.   DIM i$(gm|)                                   ! Array für die 160 Textzeilen
  4182.   ' ............................................................................
  4183.   LET d%=2370+235                               ! Druckervorschubl. ganzes Blatt
  4184.   ' ............................................................................
  4185.   '     1.)  T e x t z e i l e n  k o n s t r u i e r e n :
  4186.   ' ............................................................................
  4187.   FOR i|=1 TO gm|                               ! Alle Stücke durch, phys
  4188.     IF NOT gi$(i|)="________"                   ! F Stückname nicht leer:
  4189.       INC j|                                    ! Stückzähler erhöhen
  4190.       LET nr$=RIGHT$("00"+STR$(j|),3)           ! formatierte Nummer
  4191.       LET i$(j|)=nr$+" | "+gi$(i|)              ! Zeile für i|-tes Stück
  4192.     ENDIF                                       !
  4193.   NEXT i|                                       ! nächstes Stück
  4194.   LET anz|=j|                                   ! Anzahl nichtleerer St. merken
  4195.   ' ............................................................................
  4196.   IF ODD(anz|)                                  ! f Anz. nichtleerer St ungerade
  4197.     LET i$(anz|+1)="                "           ! Leerzchn als zus.String dranh.
  4198.     INC anz|                                    ! Anzahl d.nichtl.Stcke erh
  4199.   ENDIF                                         !
  4200.   FOR i|=1 TO anz|/2                            ! Alle Stücke durch, alph
  4201.     LET i$(i|)=i$(i|)+"    "+i$(i|+(anz|/2))    ! beide Spalten in eine Zeile
  4202.   NEXT i|                                       ! nächstes Stück
  4203.   ' ............................................................................
  4204.   '     2.)  A u s d r u c k e n
  4205.   ' ............................................................................
  4206.   @a_alert("Wirklich drucken?/Ja|Nein",r|)      ! d
  4207.   IF r|=2                                       ! F Abbruch gewählt:
  4208.     GOTO raus_inhverz                           ! raus
  4209.   ENDIF                                         !
  4210.   ' ............................................................................
  4211.   SGET schirm$                                  ! Bildschirm retten
  4212.   PBOX 0,0,639,399                              ! Bildschirm schwarz
  4213.   HIDEM                                         ! Mauspfeil weg
  4214.   ' ............................................................................
  4215.   LET i$="I N H A L T S V E R Z E I C H N I S"  !
  4216.   LET i$=i$+"     "+ghptfle$                    !
  4217.   LPRINT i$                                     !
  4218.   LPRINT                                        !
  4219.   ' ............................................................................
  4220.   @5_druckerinitialisierung                     !
  4221.   LPRINT CHR$(27);CHR$(83);CHR$(0);             ! selects superscripts
  4222.   '  LPRINT CHR$(27);CHR$(69);                  ! selects emphasized printing
  4223.   LPRINT CHR$(27);CHR$(51);CHR$(24);            ! sets line spac. to n/216 inch
  4224.   LPRINT CHR$(27);CHR$(108);CHR$(10);           ! stets the left margin
  4225.   ' ............................................................................
  4226.   FOR i|=1 TO anz|/2                            ! Alle Stücke durch, alph
  4227.     LPRINT i$(i|)                               ! Doppelspaltenzeile dr,Infos
  4228.     '                                           ! für i|-tes & i|+80-tes Stück.
  4229.     LET d%=d%-24                                !
  4230.   NEXT i|                                       ! nächstes Stück
  4231.   @5_druckerinitialisierung                     !
  4232.   ' ............................................................................
  4233.   SPUT schirm$                                  ! Bildschirm wieder herstellen
  4234.   SHOWM                                         ! Mauspfeil zeigen
  4235.   @6_druckervorschub_in_216tel_inch(d%)         ! Restliche Länge als Vorschub
  4236.   ' ............................................................................
  4237. raus_inhverz:                                 ! Rauslabel
  4238.   ERASE i$()                                    ! Array für die 160 Textzeilen
  4239.   ' ----------------------------------------------------------------------------
  4240. RETURN
  4241. > PROCEDURE 4_akt_stueck_mit_extra_kopfzeile_drucken
  4242.   ' ----------------------------------------------------------------------------
  4243.   LOCAL z|                                      ! Maximalzeilennummer
  4244.   LOCAL m|                                      ! Alertwahlvariable
  4245.   LOCAL a%                                      ! Maximalnotennummer
  4246.   LOCAL a$                                      ! Diverse Texte
  4247.   LOCAL bld$                                    ! Bildschirmrettungsstring
  4248.   ' ............................................................................
  4249.   @a_alert("Drucken ?/Ja|Nein",m|)              !
  4250.   IF m|=2                                       ! f Abbruch gewählt
  4251.     GOTO raus_drucken                           !
  4252.   ENDIF                                         !
  4253.   ' ............................................................................
  4254.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile löschen
  4255.   LET a$="40-Zeichen-Zeile eingeben"            !
  4256.   LET a$=a$+"(0=Abbruch):"                      !
  4257.   PRINT CHR$(27);CHR$(112);                     ! invers ein
  4258.   PRINT AT(1,1);a$;                             !
  4259.   PRINT CHR$(27);CHR$(113);                     ! invers aus
  4260.   PRINT AT(40,1);                               !
  4261.   LET a$="DUEDITA V.1.0 / "+gname$+" / "        !
  4262.   FOR i|=1 TO 160                               !
  4263.     EXIT IF gi$(i|)=gname$                      !
  4264.   NEXT i|                                       !
  4265.   LET a$=a$+STR$(i|)                            ! Stücknummer auch ausgeben
  4266.   FORM INPUT 40 AS a$                           !
  4267.   ' ............................................................................
  4268.   IF a$<>"" AND a$<>"0"                         ! f was eingegeben:
  4269.     @a_info("bitte warten!")                    !
  4270.     @5_druckerinitialisierung                   !
  4271.     LPRINT SPACE$(30);a$;                       ! Infozeile ausdrucken
  4272.     SGET bld$                                   ! Bildschirm retten
  4273.     @5_drucken2(ga$(1),ga$(2))                  ! tatsächlich drucken
  4274.     SPUT bld$                                   ! Bildschirm wiederherstellen
  4275.     @2_workscreen_menue_zeigen                  !
  4276.   ENDIF                                         !
  4277.   ' ............................................................................
  4278. raus_drucken:                                 !
  4279.   @2_workscreen_menue_zeigen                    !
  4280.   ' ----------------------------------------------------------------------------
  4281.   ' |1:         Es wurden bei z| bisher Doppelzeilen berechnet, der Array
  4282.   '             gzvs%() rechnet aber mit Einzelzeilen, deshalb hier 2*z| und
  4283.   '             +1 deshalb, weil ja die letzte Zeile nicht auch gelöscht werden
  4284.   '             soll, sondern nur das, was echt unterhalb dieser Zeile ist.
  4285.   ' ----------------------------------------------------------------------------
  4286. RETURN
  4287. > PROCEDURE 5_drucken2(s1$,s2$)
  4288.   ' ----------------------------------------------------------------------------
  4289.   LOCAL info!                                   ! Hat Note unnormale Informat.?
  4290.   LOCAL s2!                                     ! Zweite Druckseite nicht leer?
  4291.   LOCAL ds|                                     ! Druckspaltenzähler
  4292.   LOCAL dz|                                     ! Druckzeilenzähler
  4293.   LOCAL s|                                      ! Stimmennr
  4294.   LOCAL d%                                      ! Druckervorschublänge
  4295.   LOCAL i%                                      ! Notennummer innerhalb x.Stimme
  4296.   LOCAL m%                                      ! Maximalnotennummer
  4297.   DIM n%(8,48)                                  ! Zeilen-Spalten-Array
  4298.   ' ............................................................................
  4299.   LET d%=2370+235                               ! Druckervorschubl. ganzes Blatt
  4300.   ' ............................................................................
  4301.   IF LEN(ga$(1))>=LEN(ga$(2))                   ! f obere Stimme >= untere St.
  4302.     LET m%=LEN(s1$)                             ! Maximallänge festlegen
  4303.   ELSE                                          !
  4304.     LET m%=LEN(s2$)                             ! Maximallänge festlegen
  4305.   ENDIF                                         !
  4306.   ' ............................................................................
  4307.   LET dz|=1                                     ! Mit 1 anfangen zu zählen
  4308.   FOR i%=1 TO m%                                ! Alle Noten
  4309.     @6_noten_info_test(i%,info!)                ! Codiert die Note Information?
  4310.     IF NOT info!                                ! f keineInfonote(=Codierungsn.)
  4311.       IF ds|=48                                 ! f Druckzeile voll
  4312.         INC dz|                                 ! erhöhe Druckzeilennummer
  4313.         LET ds|=1                               ! Druckspaltenzähler=1
  4314.       ELSE                                      !
  4315.         INC ds|                                 ! erhöhe Druckspaltenzähler
  4316.       ENDIF                                     !
  4317.       LET n%(dz|,ds|)=i%                        ! Notennummer in Array
  4318.     ENDIF                                       !
  4319.   NEXT i%                                       ! Nächste
  4320.   ' ............................................................................
  4321.   CLS                                           ! Bildschirm löschen
  4322.   FOR dz|=1 TO 4                                ! die ersten 4 Druckzeilen durch
  4323.     FOR ds|=1 TO 48                             ! alle Druckspalten durch
  4324.       @6_d(s1$,1,dz|,ds|,n%(dz|,ds|),s2!)       !
  4325.     NEXT ds|                                    ! nächste Druckspalte
  4326.   NEXT dz|                                      ! nächste Druckzeile
  4327.   FOR dz|=1 TO 4                                ! die ersten 4 Druckzeilen durch
  4328.     FOR ds|=1 TO 48                             ! alle Druckspalten durch
  4329.       @6_d(s2$,2,dz|,ds|,n%(dz|,ds|),s2!)       !
  4330.     NEXT ds|                                    ! nächste Druckspalte
  4331.   NEXT dz|                                      ! nächste Druckzeile
  4332.   HARDCOPY                                      !
  4333.   LET d%=d%-1200                                ! Länge einer Hardcopy abziehen
  4334.   CLS                                           ! Bildschirm löschen
  4335.   LET s2!=FALSE                                 ! erst mal nix auf 2.Druckseite
  4336.   FOR dz|=5 TO 8                                ! die zweiten 4Druckzeilen durch
  4337.     FOR ds|=1 TO 48                             ! alle Druckspalten durch
  4338.       @6_d(s1$,1,dz|-4,ds|,n%(dz|,ds|),s2!)!    |1:
  4339.     NEXT ds|                                    ! nächste Druckspalte
  4340.   NEXT dz|                                      ! nächste Druckzeile
  4341.   FOR dz|=5 TO 8                                ! die zweiten 4Druckzeilen durch
  4342.     FOR ds|=1 TO 48                             ! alle Druckspalten durch
  4343.       @6_d(s2$,2,dz|-4,ds|,n%(dz|,ds|),s2!)     ! |1:
  4344.     NEXT ds|                                    ! nächste Druckspalte
  4345.   NEXT dz|                                      ! nächste Druckzeile
  4346.   GET 0,18,639,399,v$                           ! Notenbild fotografieren
  4347.   CLS                                           ! Bildschirm löschen
  4348.   PUT 0,0,v$                                    ! Notenbild nach oben verschiebn
  4349.   IF s2!                                        ! f was auf 2.Druckseite
  4350.     HARDCOPY                                    !
  4351.     LET d%=d%-1200                              ! Länge einer Hardcopy abziehen
  4352.   ENDIF                                         !
  4353.   @6_druckervorschub_in_216tel_inch(d%)         ! Restliche Länge als Vorschub
  4354.   ' ............................................................................
  4355.   ERASE n%()                                    ! Zeilen-Spalten-Array löschen
  4356.   ' ----------------------------------------------------------------------------
  4357.   ' |1:         Die Position bleibt diesselbe wie beider ersten Druckseite,
  4358.   '             deshalb dz|-4, da sich die Position über dz| berechnet.
  4359.   ' ----------------------------------------------------------------------------
  4360. RETURN
  4361. > PROCEDURE 6_noten_info_test(nr%,VAR info!)
  4362.   ' ----------------------------------------------------------------------------
  4363.   LOCAL a$                                      ! Byte der Notencharakteristik
  4364.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4365.   LOCAL th|                                     ! Tonhöhe
  4366.   LOCAL gebunden!                               ! Flag für Attribut: Gebunden
  4367.   LOCAL unt_kl!                                 ! Flag für untere Klaviatur
  4368.   LOCAL taktstr!                                ! Flag für Taktstrich
  4369.   ' ............................................................................
  4370.   LET info!=FALSE                               ! erst mal vom guten ausgehen...
  4371.   ' ............................................................................
  4372.   ' B E I  1. S T I M M E  T E S T E N :
  4373.   ' ............................................................................
  4374.   LET a|=ASC(MID$(ga$(1),nr%,1))                ! Notencharakteristik Abkürzen
  4375.   LET a$=BIN$(a|,8)                             ! Notenchar. als Byte darstellen
  4376.   LET gebunden!=(-1)*VAL(MID$(a$,1,1))          ! Gebundenflag
  4377.   LET unt_kl!=(-1)*VAL(MID$(a$,2,1))            ! Unt.Kl.flag
  4378.   LET taktstr!=(-1)*VAL(MID$(a$,3,1))           ! Taktstrichflag
  4379.   LET th|=VAL("%"+MID$(a$,4,5))                 ! Tonhöhe
  4380.   ' ............................................................................
  4381.   IF gebunden! AND taktstr!                     ! f Codierungsnote:
  4382.     LET info!=TRUE                              ! Meldung erteilen
  4383.   ENDIF                                         !
  4384.   ' ............................................................................
  4385.   ' B E I  2. S T I M M E  T E S T E N :
  4386.   ' ............................................................................
  4387.   LET a|=ASC(MID$(ga$(2),nr%,1))                ! Notencharakteristik Abkürzen
  4388.   LET a$=BIN$(a|,8)                             ! Notenchar. als Byte darstellen
  4389.   LET gebunden!=(-1)*VAL(MID$(a$,1,1))          ! Gebundenflag
  4390.   LET unt_kl!=(-1)*VAL(MID$(a$,2,1))            ! Unt.Kl.flag
  4391.   LET taktstr!=(-1)*VAL(MID$(a$,3,1))           ! Taktstrichflag
  4392.   LET th|=VAL("%"+MID$(a$,4,5))                 ! Tonhöhe
  4393.   ' ............................................................................
  4394.   IF gebunden! AND taktstr!                     ! f Codierungsnote:
  4395.     LET info!=TRUE                              ! Meldung erteilen
  4396.   ENDIF                                         !
  4397.   ' ----------------------------------------------------------------------------
  4398.   ' PROCEDURE 4_automatisch_taktstrich_setzen
  4399.   ' ----------------------------------------------------------------------------
  4400. RETURN
  4401. > PROCEDURE 6_d(s$,s|,dz|,ds|,n%,VAR s!)
  4402.   ' ----------------------------------------------------------------------------
  4403.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4404.   LOCAL p%                                      ! Grafikposition
  4405.   LOCAL l$                                      ! Leernotenfotostring
  4406.   ' ............................................................................
  4407.   IF n%=0                                       ! f nicht aufgenommene Note:
  4408.     GOTO raus_6_eine_seite                      ! hau ab
  4409.   ENDIF                                         !
  4410.   LET s!=TRUE                                   ! istetwas auf dieser Druckseite
  4411.   ' ............................................................................
  4412.   LET a|=ASC(MID$(s$,n%,1))                     ! Notencharakteristik Abkürzen
  4413.   LET p%=(dz|-1)*80+25+ds|                      ! Positionsnummer berechnen
  4414.   IF s|=1                                       ! f 1.Stimme
  4415.     PUT gx%(s|,p%),gy%(s|,p%),gb$(s|,a|)        ! Note zeichnen
  4416.     LET x%=gx%(s|,p%)                           !
  4417.     LET y%=gy%(s|,p%)                           !
  4418.     LINE x%,y%,x%+7,y%                          ! obere Begrenzungslinie
  4419.   ELSE                                          ! f 2.Stimme
  4420.     PUT gx%(s|,p%),gy%(s|,p%)-3,gb$(s|,a|)      ! Note etwas höher zeichnen
  4421.   ENDIF                                         !
  4422.   ' ............................................................................
  4423.   LET l$=gb$(s|,0)                              ! Leernotenfotostring abkürzen
  4424.   IF s|=1 AND ds|=1                             ! f 1.Stimme & am Druckzlnanf.
  4425.     TEXT gx%(s|,p%-5),gy%(s|,p%-6)+30,"1:"      ! Stimmennummer angeben
  4426.     PUT gx%(s|,p%-1),gy%(s|,p%-1),l$            ! Leernote zeichnen
  4427.     PUT gx%(s|,p%-2),gy%(s|,p%-2),l$            ! Leernote zeichnen
  4428.     PUT gx%(s|,p%-3),gy%(s|,p%-3),l$            ! Leernote zeichnen
  4429.     PUT gx%(s|,p%-3),gy%(s|,p%-3),gns$,7        ! Notenschlüssel zeichnen
  4430.   ELSE IF ds|=1                                 ! f 2.Stimme & am Druckzlnanf.
  4431.     TEXT gx%(s|,p%-5),gy%(s|,p%-6)+30,"2:"      ! Stimmennummer angeben
  4432.     PUT gx%(s|,p%-1),gy%(s|,p%-1)-3,l$          ! Leernote etwas höher zeichnen
  4433.     PUT gx%(s|,p%-2),gy%(s|,p%-2)-3,l$          ! Leernote etwas höher zeichnen
  4434.     PUT gx%(s|,p%-3),gy%(s|,p%-3)-3,l$          ! Leernote etwas höher zeichnen
  4435.     PUT gx%(s|,p%-3),gy%(s|,p%-3),gns$,7        ! Notenschlüssel höher zeichnen
  4436.   ENDIF                                         !
  4437.   ' ............................................................................
  4438. raus_6_eine_seite:                            !
  4439.   ' ----------------------------------------------------------------------------
  4440. RETURN
  4441. > PROCEDURE 6_druckervorschub_in_216tel_inch(d%)
  4442.   ' ----------------------------------------------------------------------------
  4443.   LOCAL t%                                      ! Anzahl der 255-er in d%
  4444.   ' ............................................................................
  4445.   IF d%>=255                                    ! f ein Vielfaches existiert
  4446.     LET t%=TRUNC(d%/255)                        ! ganz.Vielf von 255 in d%
  4447.     LPRINT CHR$(27);CHR$(51);CHR$(255);         ! Vorschubdef.: 255 x 1/216 inch
  4448.     FOR i%=1 TO t%                              ! Alle Vielfachen durch
  4449.       LPRINT CHR$(10);CHR$(13);                 ! Linefeed and Carriage Return
  4450.     NEXT i%                                     !
  4451.     LPRINT CHR$(27);CHR$(51);CHR$(d%-t%*255);   ! Vorschubdef. ... x 1/216 inch
  4452.   ELSE                                          !
  4453.     LPRINT CHR$(27);CHR$(51);CHR$(d%);          ! Vorschubdef. d% x 1/216 inch
  4454.   ENDIF                                         !
  4455.   LPRINT CHR$(10);CHR$(13);                     ! Linefeed and Carriage Return
  4456.   ' ----------------------------------------------------------------------------
  4457. RETURN
  4458. > PROCEDURE 4_bestimmte_stuecke_drucken
  4459.   ' ----------------------------------------------------------------------------
  4460.   LOCAL i|                                      ! Stückzähler
  4461.   LOCAL a|                                      ! Wahlvariable für Menü
  4462.   LOCAL m|                                      ! Maustastenvar. für Menü
  4463.   LOCAL x|                                      ! Wahlvariable für Alertbox
  4464.   LOCAL n%                                      ! Tastencode
  4465.   LOCAL c$                                      ! Bildschirmnegativ
  4466.   LOCAL i$                                      ! Infostring
  4467.   DIM g!(gm|)                                   ! Boolearray für Menü
  4468.   ' ............................................................................
  4469.   SGET c$                                       ! Bildschirm retten
  4470.   SPUT gfsb$                                    ! Fileselectbox ausgeben
  4471.   @2_workscreen_menue_zeigen                    !
  4472.   ' ............................................................................
  4473.   LET i$="Bestimmte Stücke drucken. "           !
  4474.   LET i$=i$+"Mit linker Maustaste "             !
  4475.   LET i$=i$+"auswählen, mit rechter starten!"   !
  4476.   @a_info(i$)                                   !
  4477.   @a_tastaturpuffer_leeren                      !
  4478.   ' ............................................................................
  4479.   @m(0,0,-1,0,-1,0,-1,4,4,8,20,m|,a|,gi$(),g!())! Menüprozedur aufrufen
  4480.   FOR i|=1 TO gm|                               ! Alle Stücke im Hauptfile durch
  4481.     IF g!(i|)                                   ! f Stück ausgewählt:
  4482.       PRINT CHR$(7);                            ! Klingeln
  4483.       LET i$=gi$(i|)+" Nr: "+STR$(i|)           ! Infozeile
  4484.       a_alert(i$+" |drucken?/Ja!|Abbruch!",x|)  !
  4485.       IF x|=1                                   !
  4486.         @5_druckerinitialisierung               !
  4487.         LPRINT SPACE$(30);i$                    ! Infozeile ausdrucken
  4488.         @5_drucken2(gs$(1,i|),gs$(2,i|))        ! tatsächlich drucken
  4489.       ELSE                                      !
  4490.         EXIT IF TRUE                            !
  4491.       ENDIF                                     !
  4492.     ENDIF                                       !
  4493.   NEXT i|                                       ! nächstes Stück
  4494.   ' ............................................................................
  4495.   ERASE g!()                                    ! Boolearray für Menü
  4496.   SPUT c$                                       ! Bildschirm wieder herstellen
  4497.   ' ----------------------------------------------------------------------------
  4498. RETURN
  4499. > PROCEDURE 5_druckerinitialisierung
  4500.   ' ----------------------------------------------------------------------------
  4501.   LPRINT CHR$(27);CHR$(64);                     ! resets the printer
  4502.   ' ----------------------------------------------------------------------------
  4503. RETURN
  4504. ' ..............................................................................
  4505. > PROCEDURE 4_block_anfang_ende_setzen                    !  B L O C K F K T
  4506.   ' ----------------------------------------------------------------------------
  4507.   LOCAL stuecklnge%                             !
  4508.   LOCAL mgba%,mgbe%                             !
  4509.   LOCAL mgc%                                    !
  4510.   ' ............................................................................
  4511.   LET stuecklnge%=LEN(ga$(gs|))                 !
  4512.   LET mgc%=gc%                                  !
  4513.   2_cursor_neu_setzen(stuecklnge%+1,0,gs|)      ! Cursor hinter Stückende
  4514.   IF (gba%=0 OR mgc%<gba%) AND stuecklnge%>mgc% ! f ... und Block möglich
  4515.     IF gbe%<>0                                  ! f Blockende schon existiert:
  4516.       LET mgbe%=gbe%                            ! Blockende merken
  4517.       @4_blockmarkierung_loeschen               !
  4518.       LET gbe%=mgbe%                            !
  4519.     ELSE                                        !
  4520.       LET gbe%=stuecklnge%                      ! Blockende auf Stückende
  4521.     ENDIF                                       !
  4522.     LET gba%=mgc%                               ! Blockanfang setzen
  4523.     @2_workscreen_menue_zeigen                  !
  4524.   ELSE IF gba%<>0 AND mgc%>gba% AND gbs|=gs|    ! f Blockanfang & Curs.>Bl.anf.
  4525.     LET mgba%=gba%                              ! Merke Blockanfang
  4526.     @4_blockmarkierung_loeschen                 !
  4527.     LET gba%=mgba%                              ! Erinnere an Blockanfang
  4528.     IF mgc%>stuecklnge%                         ! f Cursor hinter Stückende:
  4529.       LET gbe%=stuecklnge%                      ! Blockende auf Stückende
  4530.     ELSE                                        !
  4531.       LET gbe%=mgc%                             ! Blockende setzen
  4532.     ENDIF                                       !
  4533.   ENDIF                                         !
  4534.   IF gba%<>0                                    ! f Block geplant
  4535.     2_cursor_neu_setzen(stuecklnge%+1,0,gs|)    ! Cursor hinter Stückende
  4536.     LET gbs|=gs|                                ! Stimme während Block merken
  4537.     @5_blockmarkierung_setzen                   !
  4538.   ENDIF                                         !
  4539.   ' ----------------------------------------------------------------------------
  4540. RETURN
  4541. > PROCEDURE 5_blockmarkierung_setzen
  4542.   ' ----------------------------------------------------------------------------
  4543.   LOCAL i%                                      ! Notenzähler
  4544.   ' ............................................................................
  4545.   LET gbl$=""                                   ! Alten Block löschen
  4546.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4547.     LET gbl$=gbl$+MID$(ga$(gs|),i%,1)           ! neuen Block konstruiren
  4548.     @6_blockmarkierung_einer_note(i%)           !
  4549.   NEXT i%                                       ! nächste Blocknote
  4550.   ' ----------------------------------------------------------------------------
  4551.   ' PROCEDURE 2_block_kopieren
  4552.   ' ----------------------------------------------------------------------------
  4553. RETURN
  4554. > PROCEDURE 6_blockmarkierung_einer_note(n%)
  4555.   ' ----------------------------------------------------------------------------
  4556.   LOCAL x%                                      ! x-Startkoordinate der Note
  4557.   LOCAL y%                                      ! y-Startkoordinate der Note
  4558.   LOCAL b$                                      ! Fotonegativstring
  4559.   ' ............................................................................
  4560.   LET x%=gx%(gs|,n%)                            ! x-Startkoordinate der Note
  4561.   LET y%=gy%(gs|,n%)                            ! y-Startkoordinate der Note
  4562.   GET x%,y%+15,x%+7,y%+33,b$                    ! mittleren Notenzeil fotogr.
  4563.   PUT x%,y%+15,b$,8                             ! Notenteil invers wieder ausg.
  4564.   ' ----------------------------------------------------------------------------
  4565.   '  PROCEDURE 3_cursor_loeschen
  4566.   ' ----------------------------------------------------------------------------
  4567. RETURN
  4568. > PROCEDURE 4_blockmarkierung_loeschen
  4569.   ' ----------------------------------------------------------------------------
  4570.   IF gbe%<>0                                    ! f Block existiert:
  4571.     @6_noten_nur_zeigen(gbs|,gba%,gbe%)         !
  4572.   ENDIF                                         !
  4573.   CLR gba%,gbe%,gbs|                            ! Blockdaten löschen
  4574.   ' ----------------------------------------------------------------------------
  4575.   ' PROCEDURE 2_block_kopieren(p%)
  4576.   ' PROCEDURE 2_blocknoten_transponieren
  4577.   ' PROCEDURE 2_blocknotenlaengen_verdoppeln
  4578.   ' PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  4579.   ' ----------------------------------------------------------------------------
  4580. RETURN
  4581. > PROCEDURE 4_block_kopieren
  4582.   ' ----------------------------------------------------------------------------
  4583.   LOCAL a$                                      ! Abkürzungsvariable
  4584.   LOCAL b$                                      ! Abkürzungsvariable
  4585.   ' ............................................................................
  4586.   IF LEN(ga$(gs|))+LEN(gbl$)>gm% OR gbl$=""     ! f Stück zu lange würde
  4587.     GOTO raus_block_kopieren                    ! oder leerer Blockspeicher:raus
  4588.   ENDIF                                         !
  4589.   ' ............................................................................
  4590.   LET a$=ga$(gs|)                               !
  4591.   LET b$=LEFT$(a$,gc%-1)+gbl$                   !
  4592.   LET a$=b$+RIGHT$(a$,LEN(a$)-gc%+1)            !
  4593.   LET ga$(gs|)=a$                               !
  4594.   @6_noten_nur_zeigen(gs|,gc%,LEN(ga$(gs|)))    !
  4595.   @4_blockmarkierung_loeschen                   !
  4596.   @2_cursor_neu_setzen(LEN(ga$(gs|))+1,0,gs|)   !
  4597.   ' ............................................................................
  4598. raus_block_kopieren:                          !
  4599.   ' ----------------------------------------------------------------------------
  4600.   ' |1:         Hier muß man aufpassen, daß der Fall ausgeschlossen wird, daß
  4601.   '             Der Cursor sich in der einen, der Block aber in der anderen
  4602.   '             Stimme sich befinden, was geschieht mit: gs|=gbs|.
  4603.   ' ----------------------------------------------------------------------------
  4604. RETURN
  4605. > PROCEDURE 4_blocknotenlaengen_verdoppeln
  4606.   ' ----------------------------------------------------------------------------
  4607.   LOCAL a|                                      ! Byte-zwischenspeicher
  4608.   LOCAL m|                                      ! Alertwahlvariable
  4609.   LOCAL a$                                      ! Abkürzungsvariable
  4610.   LOCAL b$                                      ! Abkürzungsvariable für Kopie
  4611.   LOCAL c$                                      ! Abkürzungsvariable
  4612.   LOCAL i$                                      ! Infotext für Alertbox
  4613.   ' ............................................................................
  4614.   LET i$="Blocknotenlängen verdoppeln ?"        !
  4615.   LET i$=i$+" / ja | nein"                      !
  4616.   @a_alert(i$,m|)                               !
  4617.   @2_workscreen_menue_zeigen                    !
  4618.   IF m|=2                                       ! f Abbruch gewählt
  4619.     GOTO raus_blocknotenlaengen_verdoppeln      ! raus
  4620.   ENDIF                                         !
  4621.   IF LEN(ga$(gs|))+LEN(gbl$)>gm%                ! f Stück zu lange würde:
  4622.     @a_info("Stück würde zu lang!")             !
  4623.     PAUSE 60                                    !
  4624.     GOTO raus_blocknotenlaengen_verdoppeln      ! raus
  4625.   ENDIF                                         !
  4626.   ' ............................................................................
  4627.   LET guname$=gname$                            ! Undo-Sicherungskopie vom Namen
  4628.   LET gu$(1)=ga$(1)                             ! Undo-Sicherheits-Kopie
  4629.   LET gu$(2)=ga$(2)                             ! Undo-Sicherheits-Kopie
  4630.   ' ............................................................................
  4631.   LET c$=ga$(gs|)                               ! Notenspeicherstring abk.
  4632.   LET a$=LEFT$(c$,gba%-1)                       ! Zeugs links vom Block zw.sp.
  4633.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4634.     LET b$=MID$(gbl$,i%-gba%+1,1)               ! Normale Note aus Block holen
  4635.     LET a$=a$+b$                                ! Normale Note dazu
  4636.     LET a|=ASC(b$)                              ! Byte-code
  4637.     IF a|<>26                                   ! f kein Pausenzeichen:
  4638.       LET a|=BSET(a|,7)                         ! Geb.zchn dazu
  4639.     ENDIF                                       !
  4640.     IF BTST(a|,5)                               ! f Taktstrich gesetzt:
  4641.       LET a|=BCLR(a|,5)                         ! Taktstrich in Kopie löschen
  4642.     ENDIF                                       !
  4643.     LET a$=a$+CHR$(a|)                          ! Notenkopie hinzufügen
  4644.   NEXT i%                                       ! nächste Blocknote
  4645.   LET a$=a$+RIGHT$(c$,LEN(c$)-gbe%)             ! Zeugs rechts vom Block dazu
  4646.   LET ga$(gs|)=a$                               ! fertigen String zurückgeben
  4647.   ' ............................................................................
  4648. raus_blocknotenlaengen_verdoppeln:            !
  4649.   @2_workscreen_menue_zeigen                    !
  4650.   @6_noten_nur_zeigen(gbs|,gba%,LEN(a$))        !
  4651.   @4_blockmarkierung_loeschen                   !
  4652.   @2_cursor_neu_setzen(LEN(ga$(gs|))+1,0,gs|)   !
  4653.   ' ----------------------------------------------------------------------------
  4654. RETURN
  4655. > PROCEDURE 4_blocknoten_transponieren
  4656.   ' ----------------------------------------------------------------------------
  4657.   LOCAL min|                                    ! Tonhöhenminimum
  4658.   LOCAL max|                                    ! Tonhöhenmaximum
  4659.   LOCAL i%                                      ! Notenzähler
  4660.   LOCAL diff%                                   ! Verschiebewert in Halbtonschr.
  4661.   LOCAL i$                                      ! Infotext
  4662.   ' ............................................................................
  4663.   @5_blockmin_blockmax(min|,max|)               ! min./max. Tonhöhe rausfinden
  4664.   IF min|=1 AND max|=49                         ! f kein Spielraum für Transp.
  4665.     GOTO raus_block_transponieren               !
  4666.   ENDIF                                         !
  4667.   ' ............................................................................
  4668. nochmal_transponier_eingabe:                  !
  4669.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile freimachen
  4670.   LET i$="Um wieviel Halbtöne soll alles "      !
  4671.   LET i$=i$+"verschoben werden "                !
  4672.   LET i$=i$+"(z.B.um-4 Halbt./0=raus)"          !
  4673.   PRINT AT(1,1);i$;                             !
  4674.   INPUT diff%                                   !
  4675.   IF diff%=0                                    !
  4676.     GOTO raus_block_transponieren               !
  4677.   ELSE IF diff%+min|<1                          ! f zu niedrig
  4678.     LET i$="Diff.:"+STR$(diff%)+" Zu niedrig !" !
  4679.     LET i$=i$+"Min|='"+STR$(min|)+"'"           !
  4680.     a_info(i$)                                  !
  4681.     PAUSE 60                                    !
  4682.     GOTO nochmal_transponier_eingabe            !
  4683.   ELSE IF diff%+max|>49                         ! f zu hoch
  4684.     LET i$="Diff.:"+STR$(diff%)+" Zu hoch !"    !
  4685.     LET i$=i$+"Max|='"+STR$(max|)+"'"           !
  4686.     a_info(i$)                                  !
  4687.     PAUSE 60                                    !
  4688.     GOTO nochmal_transponier_eingabe            !
  4689.   ENDIF                                         !
  4690.   ' ............................................................................
  4691.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4692.     @5_einzelnote_transponieren(i%,diff%)       !
  4693.   NEXT i%                                       ! nächste Blocknote
  4694.   ' ............................................................................
  4695. raus_block_transponieren:                     !
  4696.   @2_workscreen_menue_zeigen                    !
  4697.   @4_blockmarkierung_loeschen                   !
  4698.   ' ----------------------------------------------------------------------------
  4699. RETURN
  4700. > PROCEDURE 5_blockmin_blockmax(VAR minimum|,maximum|)
  4701.   ' ----------------------------------------------------------------------------
  4702.   LOCAL i%                                      ! Notenzähler
  4703.   LOCAL a$                                      ! Byte der Notencharakteristik
  4704.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4705.   LOCAL th|                                     ! Tonhöhe
  4706.   LOCAL unt_kl!                                 ! Flag für untere Klaviatur
  4707.   ' ............................................................................
  4708.   LET minimum|=49                               ! Minimum erst mal höchste Tonh.
  4709.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4710.     LET a|=ASC(MID$(ga$(gs|),i%,1))             ! Notencharakteristik Abkürzen
  4711.     LET a$=BIN$(a|,8)                           ! Notenchar. als Byte darstellen
  4712.     LET unt_kl!=(-1)*VAL(MID$(a$,2,1))          ! Unt.Kl.flag
  4713.     LET th|=VAL("%"+MID$(a$,4,5))               ! Tonhöhe
  4714.     IF th|=26 OR th|=26+32                      ! f Pause:
  4715.       GOTO naechste_blocknote                   ! nicht als Note behandeln
  4716.     ENDIF                                       !
  4717.     IF NOT unt_kl!                              ! f obere Klaviaturhälfte:
  4718.       LET th|=th|+24                            ! untere dazuzählen
  4719.     ENDIF                                       !
  4720.     IF th|>maximum|                             ! f neue oberste Tonhöhe:
  4721.       LET maximum|=th|                          ! neues Maximum
  4722.     ELSE IF th|<minimum|                        ! f neue unterste Tonhöhe:
  4723.       LET minimum|=th|                          ! neues Minimum
  4724.     ENDIF                                       !
  4725.   naechste_blocknote:                         !
  4726.   NEXT i%                                       ! nächste Blocknote
  4727.   ' ----------------------------------------------------------------------------
  4728. RETURN
  4729. > PROCEDURE 5_einzelnote_transponieren(i%,diff%)
  4730.   ' ----------------------------------------------------------------------------
  4731.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4732.   LOCAL h|                                      ! Tonhöhe
  4733.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  4734.   LOCAL u!                                      ! Flag für untere Klaviatur
  4735.   LOCAL t!                                      ! Flag für Taktstrich
  4736.   ' ............................................................................
  4737.   @4_tonanalyse(i%,ga$(gs|),h|,t!,u!,g!)        ! Ton analysieren
  4738.   IF h|=26 OR h|=26+1*32                        ! f Pause:
  4739.     GOTO raus_einzelnote_transponieren          ! Pause vom Tr. verschonen
  4740.   ENDIF                                         !
  4741.   IF NOT u!                                     ! f obere Klaviaturhälfte:
  4742.     LET h|=h|+24                                ! untere dazuzählen
  4743.   ENDIF                                         !
  4744.   LET h|=h|+diff%                               ! T r a n s p o n i e r e n
  4745.   IF h|<25                                      ! f untere Klaviaturhälfte:
  4746.     LET u!=TRUE                                 ! entsprechendes Attribut setzen
  4747.   ELSE                                          ! f obere Klaviaturhälfte
  4748.     LET u!=FALSE                                ! Attribut löschen
  4749.     LET h|=h|-24                                ! Duedita-Kodierung errechnen
  4750.   ENDIF                                         !
  4751.   ' ............................................................................
  4752. raus_einzelnote_transponieren:                !
  4753.   LET a|=h|+32*ABS(t!)+64*ABS(u!)+128*ABS(g!)   ! Tonhöhe + Attribut Unt.Kl.!=u!
  4754.   MID$(ga$(gs|),i%,1)=CHR$(a|)                  ! Abkürzung an Speicherstrng üb.
  4755.   ' ----------------------------------------------------------------------------
  4756. RETURN
  4757. > PROCEDURE 4_automatisch_taktstrich_setzen
  4758.   ' ----------------------------------------------------------------------------
  4759.   LOCAL s|                                      ! Taktlänge gbs|. Stimme
  4760.   LOCAL i$                                      ! Infotext
  4761.   ' ............................................................................
  4762.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile freimachen
  4763.   LET i$="Wieviel Basistöne soll der Takt in "  !
  4764.   LET i$=i$+"der "+STR$(gbs|)+". Stimme "       !
  4765.   LET i$=i$+"im Block enthalten "               !
  4766.   PRINT AT(1,1);i$;                             !
  4767.   INPUT s|                                      ! Taktlänge gbs|. Stimme
  4768.   ' ............................................................................
  4769.   @5_takt_setzen_in_stimme(gbs|,s|)             !
  4770.   ' ............................................................................
  4771.   @2_workscreen_menue_zeigen                    !
  4772.   @4_blockmarkierung_loeschen                   !
  4773.   ' ----------------------------------------------------------------------------
  4774. RETURN
  4775. > PROCEDURE 5_takt_setzen_in_stimme(s|,tl|)
  4776.   ' ----------------------------------------------------------------------------
  4777.   LOCAL info!                                   ! Hat Note unnormale Informat.?
  4778.   LOCAL tnz|                                    ! Taktnotenzähler
  4779.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4780.   LOCAL nr%                                     ! Notenzähler
  4781.   LOCAL i%                                      ! Notenplatzzähler
  4782.   ' ............................................................................
  4783.   FOR i%=gba% TO gbe%                           ! s.Stimme durch im Blockbereich
  4784.     @6_noten_info_test(i%,info!)                ! Codiert die Note Information?
  4785.     IF NOT info!                                ! f keine Infonote:
  4786.       INC nr%                                   ! Notennummer erhöhen
  4787.       INC tnz|                                  ! Taktnotenzähler erhöhen
  4788.       IF nr%=1                                  ! f Stückanfang:
  4789.         LET tnz|=tl|                            ! mit Taktstrich anfangen
  4790.       ENDIF                                     !
  4791.       LET a|=ASC(MID$(ga$(s|),i%,1))            ! Notencharakteristik Abkürzen
  4792.       IF tnz|=tl|                               ! f Takt voll
  4793.         LET a|=BSET(a|,5)                       ! Taktstrichflag setzen
  4794.         LET a|=BCLR(a|,7)                       ! Gebundenzeichenflag löschen |1
  4795.         LET tnz|=0                              ! Taktnotenzähler null setzen
  4796.       ELSE                                      ! f Takt nicht voll
  4797.         LET a|=BCLR(a|,5)                       ! Taktstrichflag löschen
  4798.       ENDIF                                     !
  4799.       MID$(ga$(s|),i%,1)=CHR$(a|)               ! Änderung abspeichern
  4800.     ENDIF                                       !
  4801.   NEXT i%                                       ! nächste Note 1.Stimme
  4802.   ' ----------------------------------------------------------------------------
  4803.   ' |1:         Bei Taktstrich gesetzt und Gebundenzeichen gesetzt entstände
  4804.   '             ja eine nichtspielbare Infonote.
  4805.   ' ----------------------------------------------------------------------------
  4806. RETURN
  4807. > PROCEDURE 4_suchen_und_ersetzen_im_block
  4808.   ' ----------------------------------------------------------------------------
  4809.   LOCAL a|                                      ! Wahlvariable
  4810.   LOCAL i$                                      ! jede Menge Text im String
  4811.   ' ............................................................................
  4812.   LET i$="Gewählt: Suchen und Ersetzen im "     !
  4813.   LET i$=i$+"Blockbereich."                     !
  4814.   @a_info(i$)                                   !
  4815.   ' ............................................................................
  4816.   LET i$="Jetzt bitte auswählen: /"             !
  4817.   LET i$=i$+"Gebundene Noten ersetzen durch  :" !
  4818.   LET i$=i$+" Pausen.|"                         !
  4819.   LET i$=i$+"Ungebundene Noten ersetzen durch:" !
  4820.   LET i$=i$+" gebundene Noten.|"                !
  4821.   LET i$=i$+"Best. Notenhöhen ersetzen durch :" !
  4822.   LET i$=i$+" andere Notenhöhen.|"              !
  4823.   LET i$=i$+" Abbruch."                         !
  4824.   @a_alert(i$,a|)                               !
  4825.   ' ............................................................................
  4826.   IF a|=1                                       !
  4827.     @5_gebundene_noten_ersetzen_durch_pausen    !
  4828.   ELSE IF a|=2                                  !
  4829.     @5_ungebundene_noten_ersetzen_durch_gebunde !
  4830.   ELSE IF a|=3                                  !
  4831.     @5_notenhoehne_ersetzen_durch_andere        !
  4832.   ENDIF                                         !
  4833.   ' ----------------------------------------------------------------------------
  4834. RETURN
  4835. > PROCEDURE 5_gebundene_noten_ersetzen_durch_pausen
  4836.   ' ----------------------------------------------------------------------------
  4837.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  4838.   LOCAL u!                                      ! Flag für untere Klaviatur
  4839.   LOCAL t!                                      ! Flag für Taktstrich
  4840.   LOCAL h|                                      ! Tonhöhe
  4841.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4842.   LOCAL i%                                      ! Blocknotenzähler
  4843.   ' ............................................................................
  4844.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4845.     @4_tonanalyse(i%,ga$(gs|),h|,t!,u!,g!)      ! Ton analysieren
  4846.     IF g! AND NOT t!                            ! f gebunden und keine Infonote
  4847.       MID$(ga$(gbs|),i%,1)=CHR$(26)             ! Pause draus machen
  4848.     ENDIF                                       !
  4849.   NEXT i%                                       ! nächste Blocknote
  4850.   ' ............................................................................
  4851.   @2_workscreen_menue_zeigen                    !
  4852.   @4_blockmarkierung_loeschen                   !
  4853.   ' ----------------------------------------------------------------------------
  4854. RETURN
  4855. > PROCEDURE 5_ungebundene_noten_ersetzen_durch_gebunde
  4856.   ' ----------------------------------------------------------------------------
  4857.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  4858.   LOCAL u!                                      ! Flag für untere Klaviatur
  4859.   LOCAL t!                                      ! Flag für Taktstrich
  4860.   LOCAL h|                                      ! Tonhöhe
  4861.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  4862.   LOCAL i%                                      ! Blocknotenzähler
  4863.   ' ............................................................................
  4864.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4865.     @4_tonanalyse(i%,ga$(gs|),h|,t!,u!,g!)      ! Ton analysieren
  4866.     IF (NOT g!) AND h|<>26 AND h|<>26+32        ! f ungebunden und keine Pause
  4867.       IF NOT t!                                 ! f kein Taktstrich:
  4868.         a|=h|+32*ABS(t!)+64*ABS(u!)+128*ABS(-1) ! gebunden machen
  4869.         MID$(ga$(gs|),i%,1)=CHR$(a|)            ! Abkürzung an Speicherstrng üb.
  4870.       ENDIF                                     !
  4871.     ENDIF                                       !
  4872.   NEXT i%                                       ! nächste Blocknote
  4873.   ' ............................................................................
  4874.   @2_workscreen_menue_zeigen                    !
  4875.   @4_blockmarkierung_loeschen                   !
  4876.   ' ----------------------------------------------------------------------------
  4877. RETURN
  4878. > PROCEDURE 5_notenhoehne_ersetzen_durch_andere
  4879.   ' ----------------------------------------------------------------------------
  4880.   LOCAL su!                                     ! Untere-Kl.flag Suchnote
  4881.   LOCAL eu!                                     ! Untere-Kl.flag Ersetznote
  4882.   LOCAL a!                                      ! Abbruchflag
  4883.   LOCAL s|                                      ! Suchnotentonhöhe
  4884.   LOCAL e|                                      ! Ersetznotentonhöhe
  4885.   LOCAL i%                                      ! Notenzähler
  4886.   LOCAL s$                                      !
  4887.   LOCAL e$                                      !
  4888.   LOCAL i$                                      ! Infotext
  4889.   ' ............................................................................
  4890.   @5_blockmin_blockmax(min|,max|)               ! min./max. Tonhöhe rausfinden
  4891.   IF min|=1 AND max|=49                         ! f kein Spielraum für Transp.
  4892.     GOTO raus_block_transponieren               !
  4893.   ENDIF                                         !
  4894.   ' ............................................................................
  4895.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile freimachen
  4896.   LET i$="Was soll ersetzt "                    !
  4897.   LET i$=i$+"werden (P=Pause,"                  !
  4898.   LET i$=i$+"C-c,c-c',c'-c'',c''-c'''/0=raus)"  !
  4899.   PRINT AT(1,1);i$;                             !
  4900.   INPUT s$                                      !
  4901.   @6_in_dueditacode_uebers(s$,s|,su!,a!)        !
  4902.   IF a!                                         ! f Abbruch gewählt:
  4903.     @a_info("Abbruch !")                        !
  4904.     PAUSE 40                                    !
  4905.     GOTO 5_notenhoehne_ersetzen_durch_andere    !
  4906.   ENDIF                                         !
  4907.   @a_tastaturpuffer_leeren                      !
  4908.   PRINT AT(1,1);SPACE$(80);                     ! Menüzeile freimachen
  4909.   LET i$="Mit was soll "+s$+" ersetzt "         !
  4910.   LET i$=i$+"wrdn (P=Pse,"                      !
  4911.   LET i$=i$+"C-c,c-c',c'-c'',c''-c'''/0=raus)"  !
  4912.   PRINT AT(1,1);i$;                             !
  4913.   INPUT e$                                      !
  4914.   @6_in_dueditacode_uebers(e$,e|,eu!,a!)        !
  4915.   IF a!                                         ! f Abbruch gewählt:
  4916.     @a_info("Abbruch !")                        !
  4917.     PAUSE 40                                    !
  4918.     GOTO 5_notenhoehne_ersetzen_durch_andere    !
  4919.   ENDIF                                         !
  4920.   ' ............................................................................
  4921.   FOR i%=gba% TO gbe%                           ! Alle Blocknoten durch
  4922.     @6_einzelton_ersetzen(i%,s|,e|,su!,eu!)     !
  4923.   NEXT i%                                       ! nächste Blocknote
  4924.   ' ............................................................................
  4925.   @2_workscreen_menue_zeigen                    !
  4926.   @4_blockmarkierung_loeschen                   !
  4927. 5_notenhoehne_ersetzen_durch_andere:          !
  4928.   ' ----------------------------------------------------------------------------
  4929. RETURN
  4930. > PROCEDURE 6_einzelton_ersetzen(i%,s|,e|,su!,eu!)
  4931.   ' ----------------------------------------------------------------------------
  4932.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  4933.   LOCAL u!                                      ! Flag für untere Klaviatur
  4934.   LOCAL t!                                      ! Flag für Taktstrich
  4935.   LOCAL h|                                      ! Tonhöhe
  4936.   ' ............................................................................
  4937.   @4_tonanalyse(i%,ga$(gbs|),h|,t!,u!,g!)       ! Ton analysieren
  4938.   ' ............................................................................
  4939.   IF h|=s| AND u!=su!                           ! Falls gesuchtes gefunden:
  4940.     a|=e|+32*ABS(t!)+64*ABS(eu!)+128*ABS(g!)    ! ersetzen mit neuer Tonhöhe
  4941.     MID$(ga$(gbs|),i%,1)=CHR$(a|)               ! Abkürzung an Speicherstrng üb.
  4942.     IF e|=26                                    ! f Ersetzhöhe=Pause:
  4943.       IF t!                                     ! f Taktstrich:
  4944.         MID$(ga$(gbs|),i%,1)=CHR$(26+32)        ! Abkürzung an Speicherstrng üb.
  4945.       ELSE                                      ! f kein Taktstrich
  4946.         MID$(ga$(gbs|),i%,1)=CHR$(26)           ! Abkürzung an Speicherstrng üb.
  4947.       ENDIF                                     !
  4948.     ENDIF                                       !
  4949.   ENDIF                                         !
  4950.   ' ----------------------------------------------------------------------------
  4951. RETURN
  4952. > PROCEDURE 6_in_dueditacode_uebers(a$,VAR a|,u!,a!)
  4953.   ' ----------------------------------------------------------------------------
  4954.   LOCAL mi|                                     ! Midi-ähnlicher Tonhöhencode
  4955.   LOCAL r$                                      ! Lesestring
  4956.   ' ............................................................................
  4957.   RESTORE notennamen                            ! Readzeiger setzen
  4958.   ' ............................................................................
  4959.   DO                                            !
  4960.     INC mi|                                     !
  4961.     READ r$                                     !
  4962.     EXIT IF a$=r$                               !
  4963.     EXIT IF r$="##"                             !
  4964.   LOOP                                          !
  4965.   IF r$="##"                                    ! f nix gefunden:
  4966.     LET a!=TRUE                                 ! Abbruchflag setzen
  4967.   ENDIF                                         !
  4968.   ' ............................................................................
  4969.   IF mi|<25                                     ! erste untere beiden Oktaven:
  4970.     LET u!=TRUE                                 ! Unt-Klaviaturflag setzen
  4971.     LET a|=mi|                                  ! Codierung gleich
  4972.   ELSE                                          ! oberen beiden Oktaven:
  4973.     LET a|=mi|-24                               ! Duedita-Code der Tonhöhen
  4974.   ENDIF                                         !
  4975.   ' ----------------------------------------------------------------------------
  4976. RETURN
  4977. > PROCEDURE 4_block_loeschen
  4978.   ' ----------------------------------------------------------------------------
  4979.   LOCAL m|                                      ! Alertwahlvariable
  4980.   LOCAL dummy%                                  !
  4981.   LOCAL ende%                                   !
  4982.   LOCAL a$                                      ! Abkürzungsvariable
  4983.   LOCAL b$                                      ! Abkürzungsvariable
  4984.   ' ............................................................................
  4985.   @a_alert("Block löschen ?  /ja|nein",m|)      !
  4986.   @2_workscreen_menue_zeigen                    !
  4987.   IF m|=2                                       ! f Abbruch gewählt
  4988.     GOTO raus_block_loeschen                    !
  4989.   ENDIF                                         !
  4990.   ' ............................................................................
  4991.   LET guname$=gname$                            ! Undo-Sicherungskopie vom Namen
  4992.   LET gu$(1)=ga$(1)                             ! Undo-Sicherheits-Kopie
  4993.   LET gu$(2)=ga$(2)                             ! Undo-Sicherheits-Kopie
  4994.   ' ............................................................................
  4995.   LET a$=ga$(gs|)                               !
  4996.   LET b$=LEFT$(a$,gba%-1)                       !
  4997.   LET a$=b$+RIGHT$(a$,LEN(a$)-gbe%)             !
  4998.   LET ga$(gs|)=a$                               !
  4999.   LET ende%=LEN(a$)+gbe%-gba%+1                 !
  5000.   @6_noten_nur_zeigen(gbs|,gba%,ende%)          !
  5001.   CLR gba%,gbe%,gbs|                            ! Blockanfang/ende löschen
  5002.   @2_cursor_neu_setzen(LEN(ga$(gs|))+1,0,gs|)   !
  5003.   ' ............................................................................
  5004. raus_block_loeschen:                          !
  5005.   ' ----------------------------------------------------------------------------
  5006. RETURN
  5007. ' ..............................................................................
  5008. > PROCEDURE 2_helptext                                    !  H I L F / E N D
  5009.   ' ----------------------------------------------------------------------------
  5010.   LOCAL bld$                                    ! Bildschirmrettstring
  5011.   LOCAL a$                                      ! Lesestring
  5012.   ' ............................................................................
  5013.   SGET bld$                                     ! Bildschirm retten
  5014.   @a_tastaturpuffer_leeren                      !
  5015.   CLS                                           ! Bildschirm löschen
  5016.   HIDEM                                         ! Maus weg
  5017.   PRINT                                         ! CR
  5018.   ' ............................................................................
  5019.   RESTORE hilfstext                             ! Lesezeiger initialisieren
  5020.   READ a$                                       ! Zeile einlesen
  5021.   WHILE a$<>"##"                                ! f noch nicht Textende erreicht
  5022.     PRINT "  ";a$;STRING$(75-LEN(a$),".");      ! Zeile ausgeben
  5023.     READ a$                                     ! Zeile einlesen
  5024.     IF a$<>"##"                                 ! f nicht letzte Zeile
  5025.       PRINT                                     ! Zeilenvorschub
  5026.     ENDIF                                       !
  5027.   WEND                                          !
  5028.   REPEAT                                        ! Auf Tastendruck warten
  5029.     PRINT AT(55,3);DATE$;" ";TIME$              !
  5030.   UNTIL INKEY$<>"" OR MOUSEK                    !
  5031.   @a_tastaturpuffer_leeren                      !
  5032.   ' ............................................................................
  5033.   SPUT bld$                                     ! Bildschirm wiederherstellen
  5034.   SHOWM                                         ! Maus her
  5035.   ' ----------------------------------------------------------------------------
  5036. RETURN
  5037. > PROCEDURE 4_programmende(w|)
  5038.   ' ----------------------------------------------------------------------------
  5039.   LOCAL a|                                      ! Menüwahlvariable
  5040.   LOCAL i$                                      !
  5041.   ' w|                                          ! Wahlvariable
  5042.   ' ............................................................................
  5043.   @1_ton_aus                                    !
  5044.   ' ............................................................................
  5045.   IF w|=5                                       ! Edit(Bei PD-Version Stop!)
  5046.     EDIT                                        !
  5047.   ELSE IF w|=2                                  ! w|=2, Quit gewählt:
  5048.     LET i$="Wollen Sie etwa Duedita verlassen?" !
  5049.     LET i$=i$+"|Haben Sie auch schon alle"      !
  5050.     LET i$=i$+" Änderungen|doppelt und dreifa"  !
  5051.     LET i$=i$+"ch abgespeichert?|/Ja doch!"     !
  5052.     LET i$=i$+"|Äh...nein!"                     !
  5053.     @a_alert(i$,a|)                             !
  5054.     IF a|=1                                     ! F 'ja' gewählt:
  5055.       QUIT                                      !
  5056.     ENDIF                                       !
  5057.   ENDIF                                         !
  5058.   ' ----------------------------------------------------------------------------
  5059. RETURN
  5060. ' ------------------------------------------------------------------------------
  5061. > PROCEDURE 1_simuliere_midi(t|,x%,u%,VAR hptm!,n%,m$)
  5062.   ' ----------------------------------------------------------------------------
  5063.   ' t|                                          ! Maustaste
  5064.   ' x%                                          ! Maus-x-Koordinate
  5065.   ' m$                                          ! Midi-String (zurück)
  5066.   ' hptm!                                       ! Hauptmenüschalter
  5067.   ' n%                                          ! Tastencode (zurück)
  5068.   ' m$                                          ! Midi-String (zurück)
  5069.   LOCAL h|                                      ! Tonhöhe (35-58,59-85)
  5070.   ' ............................................................................
  5071.   IF x%<20                                      ! Pausentaste ?
  5072.     IF t|=1 AND u%=8                            ! f rechte Maustaste + Alt.:
  5073.       LET h|=26                                 ! Pausencode
  5074.       LET n%=3735584                            ! simuliere: Space gedrückt:
  5075.     ELSE IF t|=2                                ! f linke Maustaste:
  5076.       LET hptm!=TRUE                            ! Hauptmenü einschalten
  5077.     ENDIF                                       !
  5078.   ELSE                                          ! Notentaste:
  5079.     LET h|=TRUNC((x%-20)/25)+1                  ! Notentaste feststellen
  5080.   ENDIF                                         !
  5081.   ' ............................................................................
  5082.   LET h|=h|+59                                  ! erst mal von oberen 2 Okt ausg
  5083.   IF t|=2                                       ! f rechte Maustaste
  5084.     LET h|=h|-24                                ! untere beiden Oktaven agespr.
  5085.   ENDIF                                         !
  5086.   LET m$=CHR$(h|)                               ! Midi-Eingabe simulieren
  5087.   ' ............................................................................
  5088.   IF h|<>26+59 AND NOT hptm!                    ! f keine Pause & nicht Hauptm.
  5089.     @4_neuer_ton_ein_auf_kanal_1(h|)            ! Ton ein Kanal 1
  5090.   ENDIF                                         !
  5091.   ' ............................................................................
  5092.   @a_mauspuffer_leeren                          !
  5093.   ' ----------------------------------------------------------------------------
  5094. RETURN
  5095. ' ------------------------------------------------------------------------------
  5096. > PROCEDURE 1_tastaturanalyse(n%)
  5097.   ' ----------------------------------------------------------------------------
  5098.   LOCAL n$                                      ! Gesamttastaturcodestring
  5099.   LOCAL a%                                      ! Ascii-Code
  5100.   LOCAL s%                                      ! Scan-Code
  5101.   LOCAL u%                                      ! Tastaturumschaltcode
  5102.   ' ............................................................................
  5103.   LET n$=STRING$(32-LEN(BIN$(n%)),"0")+BIN$(n%) ! |1
  5104.   LET a%=VAL("%"+RIGHT$(n$,8))                  ! Ascii-Code
  5105.   LET s%=VAL("%"+MID$(n$,9,8))                  ! Scan-Code
  5106.   LET u%=VAL("%"+LEFT$(n$,8))                   ! Tastaturumschaltcode
  5107.   ' ............................................................................
  5108.   IF s%=98                                      ! Help
  5109.     @2_helptext                                 !
  5110.   ELSE IF s%=15 AND u%=0                        ! Tab ohne Control
  5111.     @2_tab_ohne_control                         !
  5112.   ELSE IF s%=15 AND u%=4                        ! Tab mit Control
  5113.     @2_tab_mit_control                          !
  5114.   ELSE IF s%=75                                 ! Pfeil nach links
  5115.     @2_pfeil_nach_links                         !
  5116.   ELSE IF s%=77                                 ! Pfeil nach rechts
  5117.     @2_pfeil_nach_rechts                        !
  5118.   ELSE IF s%=72 AND u%=0                        ! Pfeil nach oben ohne Shift
  5119.     @2_pfeil_nach_oben_ohne_shift               !
  5120.   ELSE IF s%=72 AND (u%=2 OR u%=1)              ! Pfeil nach oben mit Shift
  5121.     @2_pfeil_nach_oben_mit_shift                !
  5122.   ELSE IF s%=80 AND u%=0                        ! Pfeil nach unten ohne Shift
  5123.     @2_pfeil_nach_unten_ohne_shift              !
  5124.   ELSE IF s%=80 AND (u%=2 OR u%=1)              ! Pfeil nach unten mit Shift
  5125.     @2_pfeil_nach_unten_mit_shift               !
  5126.   ELSE IF s%=71 AND u%=0                        ! Clr/Home
  5127.     @2_clr_home_ohne_shift                      !
  5128.   ELSE IF s%=71 AND (u%=2 OR u%=1)              ! Clr/Home mit Shift-Taste
  5129.     @2_clr_home_mit_shift                       !
  5130.   ELSE IF s%=14                                 ! 'Backspace'
  5131.     @2_backspace                                !
  5132.   ELSE IF s%=82                                 ! 'Insert'
  5133.     @2_insert                                   !
  5134.   ELSE IF s%=97                                 ! 'Undo'
  5135.     @2_undo                                     !
  5136.   ELSE IF s%=31 AND u%=8                        ! 's' + 'Alternate'
  5137.     @s                                          ! Bildschirm schwarz und warten
  5138.   ENDIF                                         !
  5139.   ' ............................................................................
  5140.   @a_tastaturpuffer_leeren                      !
  5141.   ' ----------------------------------------------------------------------------
  5142.   ' |1:         Größe von n$:    76543210765432107654321076543210
  5143.   '                              [      ] <- Tastaturumschaltcode 256^3
  5144.   '                                      [      ] <- Scan-Code  !
  5145.   '                                              [      ] <- unbenutzt
  5146.   '                                                      [      ] <- Ascii-Code
  5147.   '                              7=..........                   !
  5148.   '                               6=.........                   !
  5149.   '                                5=........                   !
  5150.   '                                 4=.......Capslock           !
  5151.   '                                  3=......Alternate          !
  5152.   '                                   2=.....Control            !
  5153.   '                                    1=....Linksshift         !
  5154.   '                                     0=...Rechtsshift        !
  5155.   '                                                             !
  5156.   '             Zähler für mid$: 12345678901234567890123456789012, insg.: 32
  5157.   '                                       1         2         3 !
  5158.   '             Zähler für Pot.: 10987654321098765432109876543210
  5159.   '                                3         2         1
  5160.   ' ----------------------------------------------------------------------------
  5161.   ' Testschleife zur Ermittlung des Tastencodes:
  5162.   ' DO                                              !
  5163.   '   KEYGET n%                                     !
  5164.   '   PRINT BIN$(n%)                                !
  5165.   '   LET n$=STRING$(32-LEN(BIN$(n%)),"0")+BIN$(n%) !
  5166.   '   LET a%=VAL("%"+RIGHT$(n$,8))                  ! Ascii-Code
  5167.   '   LET s%=VAL("%"+MID$(n$,9,8))                  ! Scan-Code
  5168.   '   LET u%=VAL("%"+LEFT$(n$,8))                   ! Tastaturumschaltcode
  5169.   '   PRINT AT(1,1);n$;" u='";u%;"' s='";s%;"' a='";a%;"' '";CHR$(a%);"'"
  5170.   ' LOOP                                            !
  5171.   ' Bemerkung: Mit dem Befehl 'KEYPRESS' kann man die CapsLock-Taste leider
  5172.   '            nicht schalten und mit r%=bios(11,2^4) [vgl.GFA-Handb.12-17]
  5173.   '            ebenfalls nicht.
  5174.   ' ----------------------------------------------------------------------------
  5175. RETURN
  5176. > PROCEDURE 2_tab_ohne_control
  5177.   ' ----------------------------------------------------------------------------
  5178.   LOCAL th|                                     ! Tonhöhe
  5179.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  5180.   LOCAL u!                                      ! Flag für untere Klaviatur
  5181.   LOCAL t!                                      ! Flag für Taktstrich
  5182.   LOCAL i%                                      ! Zukünftiger Cursorplatz
  5183.   ' ............................................................................
  5184.   LET i%=gc%                                    ! erst mal gleich
  5185.   ' ............................................................................
  5186.   @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)       ! Ton analysieren
  5187.   INC i%                                        !
  5188.   @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)       ! Ton analysieren
  5189.   WHILE (NOT t!) AND i%<LEN(ga$(gs|))           ! f kein Taktstr. & nicht Ende
  5190.     INC i%                                      !
  5191.     @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)     ! Ton analysieren
  5192.   WEND                                          !
  5193.   ' ............................................................................
  5194.   @2_cursor_neu_setzen(i%,0,gs|)                !
  5195.   PAUSE 1                                       ! Ton aushalten
  5196.   ' ----------------------------------------------------------------------------
  5197. RETURN
  5198. > PROCEDURE 2_tab_mit_control
  5199.   ' ----------------------------------------------------------------------------
  5200.   LOCAL th|                                     ! Tonhöhe
  5201.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  5202.   LOCAL u!                                      ! Flag für untere Klaviatur
  5203.   LOCAL t!                                      ! Flag für Taktstrich
  5204.   LOCAL i%                                      ! Zukünftiger Cursorplatz
  5205.   ' ............................................................................
  5206.   IF gc%=1                                      ! f schon am Anfang
  5207.     GOTO raus_2_tab_mit_control                 ! raus
  5208.   ENDIF                                         !
  5209.   ' ............................................................................
  5210.   LET i%=gc%                                    ! erst mal gleich
  5211.   ' ............................................................................
  5212.   @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)       ! Ton analysieren
  5213.   DEC i%                                        !
  5214.   @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)       ! Ton analysieren
  5215.   WHILE (NOT t!) AND i%>1                       ! f kein Taktstr. & nicht Anfang
  5216.     DEC i%                                      !
  5217.     @4_tonanalyse(i%,ga$(gs|),th|,t!,u!,g!)     ! Ton analysieren
  5218.   WEND                                          !
  5219.   ' ............................................................................
  5220.   @2_cursor_neu_setzen(i%,0,gs|)                !
  5221.   ' ............................................................................
  5222. raus_2_tab_mit_control:                       !
  5223.   PAUSE 1                                       ! Ton aushalten
  5224.   ' ----------------------------------------------------------------------------
  5225. RETURN
  5226. > PROCEDURE 2_pfeil_nach_links
  5227.   ' ----------------------------------------------------------------------------
  5228.   IF gc%>1                                      !
  5229.     @2_cursor_neu_setzen(gc%-1,0,gs|)           !
  5230.   ENDIF                                         !
  5231.   PAUSE 1                                       ! Ton aushalten
  5232.   ' ----------------------------------------------------------------------------
  5233. RETURN
  5234. > PROCEDURE 2_pfeil_nach_rechts
  5235.   ' ----------------------------------------------------------------------------
  5236.   IF gc%<320                                    !
  5237.     @2_cursor_neu_setzen(gc%+1,0,gs|)           !
  5238.   ENDIF                                         !
  5239.   PAUSE 1                                       ! Ton aushalten
  5240.   ' ----------------------------------------------------------------------------
  5241. RETURN
  5242. > PROCEDURE 2_pfeil_nach_oben_ohne_shift
  5243.   ' ----------------------------------------------------------------------------
  5244.   IF gs|=2                                      ! f in 2.Stimme:
  5245.     @2_cursor_neu_setzen(gc%,0,1)               ! in 1. Stimme wechseln=Einzzle
  5246.   ELSE IF gc%>80                                ! f in 1.St.&n. in 1.Doppelzeile
  5247.     @2_cursor_neu_setzen(gc%-80,0,2)            ! in 1. Stimme wechseln, also
  5248.   ENDIF                                         ! eine Einzelzeile rauf
  5249.   PAUSE 1                                       ! Ton aushalten
  5250.   ' ----------------------------------------------------------------------------
  5251. RETURN
  5252. > PROCEDURE 2_pfeil_nach_oben_mit_shift
  5253.   ' ----------------------------------------------------------------------------
  5254.   IF gc%>80                                     ! f nicht in 1. Doppelzeile
  5255.     @2_cursor_neu_setzen(gc%-80,0,gs|)          ! eine Doppelzeile rauf
  5256.   ENDIF                                         !
  5257.   PAUSE 1                                       ! Ton aushalten
  5258.   ' ----------------------------------------------------------------------------
  5259. RETURN
  5260. > PROCEDURE 2_pfeil_nach_unten_ohne_shift
  5261.   ' ----------------------------------------------------------------------------
  5262.   IF gs|=1                                      ! f 1. Stimme:
  5263.     @2_cursor_neu_setzen(gc%,0,2)               ! in 2. Stimme wechseln=Einzzle
  5264.   ELSE IF gc%<241 AND LEN(ga$(1))>=gc%+80       ! f in 2.Stimme, n.in letzt.Dzle
  5265.     @2_cursor_neu_setzen(gc%+80,0,1)            ! in 1. Stimme wechseln, also
  5266.   ENDIF                                         ! eine Einzelzeile runter
  5267.   PAUSE 1                                       ! Ton aushalten
  5268.   ' ----------------------------------------------------------------------------
  5269. RETURN
  5270. > PROCEDURE 2_pfeil_nach_unten_mit_shift
  5271.   ' ----------------------------------------------------------------------------
  5272.   IF gc%<241                                    ! f nicht in letzter Doppelzle:
  5273.     @2_cursor_neu_setzen(gc%+80,0,gs|)          ! eine Doppelzeile runter
  5274.   ENDIF                                         !
  5275.   PAUSE 1                                       ! Ton aushalten
  5276.   ' ----------------------------------------------------------------------------
  5277. RETURN
  5278. > PROCEDURE 2_clr_home_ohne_shift
  5279.   ' ----------------------------------------------------------------------------
  5280.   @2_cursor_neu_setzen(1,0,gs|)                 !
  5281.   PAUSE 1                                       ! Ton aushalten
  5282.   ' ----------------------------------------------------------------------------
  5283. RETURN
  5284. > PROCEDURE 2_clr_home_mit_shift
  5285.   ' ----------------------------------------------------------------------------
  5286.   @2_cursor_neu_setzen(LEN(ga$(gs|))+1,0,gs|)   !
  5287.   PAUSE 1                                       ! Ton aushalten
  5288.   ' ----------------------------------------------------------------------------
  5289. RETURN
  5290. > PROCEDURE 2_backspace
  5291.   ' ----------------------------------------------------------------------------
  5292.   LOCAL a$                                      ! Abkürzungsstring
  5293.   ' ............................................................................
  5294.   IF gc%=1                                      ! f erste Note aktuell:
  5295.     GOTO raus_backspace                         ! verschwinde
  5296.   ENDIF                                         !
  5297.   ' ............................................................................
  5298.   LET a$=ga$(gs|)                               ! Notenspeicherstring abkürzen
  5299.   a$=LEFT$(a$,gc%-2)+RIGHT$(a$,LEN(a$)-gc%+1)   ! Backspace vollziehen
  5300.   LET ga$(gs|)=a$                               ! neuen Speicherstring zurückgeb
  5301.   @6_noten_nur_zeigen(gs|,gc%+1,LEN(a$)+1)      ! Notentextbild aktualisieren |1
  5302.   @2_cursor_neu_setzen(gc%-1,0,gs|)             !
  5303. raus_backspace:                               !
  5304.   ' ----------------------------------------------------------------------------
  5305.   ' |1:         Ich kann mit gc%+1 beginnen, weil die Noten bei gc% und bei
  5306.   '             gc%-1 mit der Prozedur 2_cursor_neu_setzen gezeigt werden.
  5307.   ' ----------------------------------------------------------------------------
  5308. RETURN
  5309. > PROCEDURE 2_insert
  5310.   ' ----------------------------------------------------------------------------
  5311.   LOCAL a$                                      ! Abkürzungsstring
  5312.   LOCAL b$                                      ! Abkürzungsstring
  5313.   ' ............................................................................
  5314.   LET a$=ga$(gs|)                               ! Notenspeicherstring abkürzen
  5315.   IF LEN(a$)=gm%                                ! f kein Platz mehr:
  5316.     GOTO raus_insert                            ! verschwinde
  5317.   ENDIF                                         !
  5318.   ' ............................................................................
  5319.   b$=LEFT$(a$,gc%-1)                            ! Insert vorbereiten
  5320.   a$=b$+CHR$(26)+RIGHT$(a$,LEN(a$)-gc%+1)       ! Insert vollziehen
  5321.   LET ga$(gs|)=a$                               ! neuen Speicherstring zurückgeb
  5322.   ' ............................................................................
  5323.   @6_noten_nur_zeigen(gs|,gc%,LEN(a$))          ! Notentextbild aktualisieren
  5324.   @3_cursor_setzen                              !
  5325. raus_insert:                                  !
  5326.   ' ----------------------------------------------------------------------------
  5327. RETURN
  5328. > PROCEDURE 2_undo
  5329.   ' ----------------------------------------------------------------------------
  5330.   LOCAL mgu1$,mgu2$,mguname$                    ! Zwischenspeicher
  5331.   ' ............................................................................
  5332.   CLR gba%,gbe%                                 ! Blockanfang/ende löschen
  5333.   ' ............................................................................
  5334.   LET mgu1$=gu$(1)                              ! alte Undostrings Zwnspeichern
  5335.   LET mgu2$=gu$(2)                              !
  5336.   LET mguname$=guname$                          !
  5337.   ' ............................................................................
  5338.   LET gu$(1)=ga$(1)                             ! Neue Undu-strings füllen
  5339.   LET gu$(2)=ga$(2)                             !
  5340.   LET guname$=gname$                            !
  5341.   ' ............................................................................
  5342.   LET ga$(1)=mgu1$                              ! Akt.Stück=alte Undu-strings
  5343.   LET ga$(2)=mgu2$                              !
  5344.   LET gname$=mguname$                           !
  5345.   ' ............................................................................
  5346.   ' SWAP ga$(2),gu$(2)                          ! Undostring übergeben |1
  5347.   ' SWAP ga$(1),gu$(1)                          ! Undostring übergeben
  5348.   ' ............................................................................
  5349.   @5_neues_stueck_zeigen                        !
  5350.   ' ----------------------------------------------------------------------------
  5351.   ' |1:         Beim Compilieren gab's bei dieser Prozedur Schwierigkeiten (Beim
  5352.   '             Interpreter hat's funktioniert!?), deshalb laß ich diese Befehle
  5353.   '             jetzt mal raus, auch wegen späterer Kompatibilität zu PCs.
  5354.   ' ----------------------------------------------------------------------------
  5355. RETURN
  5356. ' ------------------------------------------------------------------------------
  5357. > PROCEDURE 1_mausanalyse(x%,y%,t|,u%)
  5358.   ' ----------------------------------------------------------------------------
  5359.   LOCAL s!                                      ! Stimmengleichheit
  5360.   LOCAL b!                                      ! auf Blocknote ?
  5361.   LOCAL l!                                      ! linke Maustaste ?
  5362.   LOCAL r!                                      ! rechte Maustaste ?
  5363.   LOCAL v!                                      ! Vor Cursornote ?
  5364.   LOCAL h!                                      ! Hinter Cursornote ?
  5365.   LOCAL g!                                      ! Direkt auf Cursornote ?
  5366.   LOCAL as|                                     ! aktuelle Stimme
  5367.   LOCAL p%                                      ! Noten-Platznummer
  5368.   ' ............................................................................
  5369.   IF y%<17                                      ! f auf Menüleiste gezeigt
  5370.     @2_helptext                                 ! Benutzer aufklären
  5371.     GOTO raus_mausanalyse                       ! raus hier
  5372.   ENDIF                                         !
  5373.   ' ............................................................................
  5374.   @2_welcher_notenplatz(x%,y%,p%,as|)           ! auf welche Note zeigt Maus?
  5375.   ' ............................................................................
  5376.   LET l!=(t|=1)                                 ! linke Maustaste ?
  5377.   LET r!=(t|=2)                                 ! rechte Maustaste ?
  5378.   '                                             !
  5379.   LET v!=(p%<gc%)                               ! Vor Cursornote ?
  5380.   LET h!=(p%>gc%)                               ! Hinter Cursornote ?
  5381.   LET g!=(p%=gc%)                               ! Direkt auf Cursornote ?
  5382.   '                                             !
  5383.   LET a!=(gbs|=as|)                             ! aktuelle Stimme = Blockst. ?
  5384.   LET b!=((p%>=gba% AND p%<=gbe%) AND a!)       ! ex. Block & auf Blocknote ?
  5385.   '                                             !
  5386.   LET s!=(gs|=as|)                              ! letzte Stimme & akt.St.gleich?
  5387.   ' ............................................................................
  5388.   IF l! AND ((v! OR h!) OR NOT s!)              !
  5389.     @2_cursor_neu_setzen(p%,u%,as|)             !
  5390.   ELSE IF l! AND g! AND (NOT b!) AND s! AND u%=0! keine Umschalttaste
  5391.     @4_taktstrich_setzen_loeschen               !
  5392.   ELSE IF r! AND v! AND (NOT b!) AND s!         !
  5393.     @2_notenabspielen(p%,gc%,u%,gname$)         !
  5394.   ELSE IF r! AND h! AND (NOT b!) AND s! AND u%=0! keine Umschalttaste
  5395.     @4_unt_klav_setzen_loeschen                 !
  5396.   ELSE IF r! AND g! AND (NOT b!) AND s! AND u%=0! keine Umschalttaste
  5397.     @4_gebundenzeichen_setzen_loeschen          !
  5398.   ELSE IF r! AND g! AND s!                      !
  5399.     IF u%=8                                     ! Alternate
  5400.       @4_block_anfang_ende_setzen               !
  5401.     ELSE IF u%=2                                ! Linksshift
  5402.       4_block_kopieren                          !
  5403.     ENDIF                                       !
  5404.   ELSE IF r! AND (v! OR h! OR g!) AND b! AND s! !
  5405.     IF u%=4                                     ! Control
  5406.       @4_block_loeschen                         !
  5407.     ELSE IF u%=8                                ! Alternate
  5408.       @4_blocknotenlaengen_verdoppeln           !
  5409.     ELSE IF u%=0                                ! keine Umschalttaste
  5410.       @4_blocknoten_transponieren               !
  5411.     ENDIF                                       !
  5412.   ENDIF                                         !
  5413.   ' ............................................................................
  5414. raus_mausanalyse:                             !
  5415.   PAUSE 5                                       ! sonst klappt Leeren nicht
  5416.   @a_mauspuffer_leeren                          !
  5417.   ' ----------------------------------------------------------------------------
  5418. RETURN
  5419. > PROCEDURE 2_welcher_notenplatz(x%,y%,VAR platz%,as|)
  5420.   ' ----------------------------------------------------------------------------
  5421.   LOCAL a%                                      ! Vertikalstart der i|. Zeile
  5422.   LOCAL b%                                      ! Vertikalstart der i|+1. Zeile
  5423.   LOCAL i|                                      ! Notenzeile
  5424.   LOCAL j|                                      ! Notenspalte
  5425.   ' ............................................................................
  5426.   FOR i|=1 TO 8                                 ! alle 8 Zeilen durch
  5427.     LET a%=gzvs%(i|)                            ! Vertikalstart der i|. Zeile
  5428.     LET b%=gzvs%(i|+1)                          ! Vertikalstart der i|+1. Zeile
  5429.     EXIT IF y%>=a% AND (y%<b% OR i|=8)          ! raus f i| die richtige Zeile
  5430.   NEXT i|                                       ! nächste Zeile
  5431.   LET as|=gs|                                   ! erst mal kein Stimmwechsel
  5432.   IF ODD(i|)                                    ! f ungerade Zeile = 1. Stimme
  5433.     LET i|=TRUNC(i|/2)+1                        ! Doppelzeilennr berechnen
  5434.     IF gs|=2                                    ! f bisher 2. Stimme:
  5435.       LET as|=1                                 ! 1. Stimme ab jetzt ansprechen
  5436.     ENDIF                                       !
  5437.   ELSE IF EVEN(i|)                              ! f gerade Zeile = 2. Stimme
  5438.     LET i|=i|/2                                 ! Doppelzeilennr berechnen
  5439.     IF gs|=1                                    ! f bisher 1. Stimme:
  5440.       LET as|=2                                 ! 2. Stimme ab jetzt ansprechen
  5441.     ENDIF                                       !
  5442.   ENDIF                                         !
  5443.   ' ............................................................................
  5444.   LET j|=TRUNC(x%/8)+1                          ! Spaltennr berechnen
  5445.   ' ............................................................................
  5446.   platz%=(i|-1)*80+j|                           ! Notenplatznummer berechnen
  5447.   ' ----------------------------------------------------------------------------
  5448. RETURN
  5449. > PROCEDURE 2_notenabspielen(a%,e%,u%,i$)
  5450.   ' ----------------------------------------------------------------------------
  5451.   LOCAL i%                                      ! Notenzähler
  5452.   LOCAL mgc%                                    ! Cursorposition merken
  5453.   LOCAL n%                                      ! Tastencode
  5454.   LOCAL dauerwiederholung!                      ! Flag für dito
  5455.   LOCAL info!                                   ! Hat Note unnormale Informat.?
  5456.   ' ............................................................................
  5457.   @a_info("NOTEN ABSPIELEN: "+i$)               !
  5458.   @1_midi_sounds_setzen                         ! f Keyboard seit Start mal aus
  5459.   @a_mauspuffer_leeren                          !
  5460.   LET mgc%=gc%                                  ! Cursorposition merken
  5461.   REPEAT                                        ! Dauerschleife
  5462.     FOR i%=a% TO e%                             ! Alle gewünschten Töne durch
  5463.       @2_cursor_neu_setzen(i%,u%,gs|)           ! Hier ist Tonabspielen dabei
  5464.       @6_noten_info_test(i%,info!)              ! Codiert die Note Information?
  5465.       IF NOT info!                              ! f nicht:
  5466.         PAUSE gbasistonlaenge|                  ! Ton aushalten
  5467.       ENDIF                                     !
  5468.       KEYLOOK n%                                ! Taste anschauen
  5469.       IF MOUSEK=2                               ! f rechte Maustaste
  5470.         LET dauerwiederholung!=TRUE             !
  5471.       ELSE IF MOUSEK=1 OR n%=65563              ! f linke Maustaste oder Esc
  5472.         LET dauerwiederholung!=FALSE            !
  5473.         @3_cursor_loeschen                      !
  5474.         EXIT IF TRUE                            ! raus
  5475.       ENDIF                                     !
  5476.     NEXT i%                                     ! Nächster Ton
  5477.   UNTIL dauerwiederholung!=FALSE                !
  5478.   @2_cursor_neu_setzen(mgc%,0,gs|)              ! Hier ist Tonabspielen dabei
  5479.   ' ----------------------------------------------------------------------------
  5480. RETURN
  5481. > PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  5482.   ' ----------------------------------------------------------------------------
  5483.   @3_cursor_loeschen                            !
  5484.   ' ............................................................................
  5485.   @4_alter_ton_aus_auf_kanal_3                  ! Schlagzeug aus (Taktstrich)
  5486.   IF gsw!=TRUE                                  ! f beim letzten Mal Stimmwechs
  5487.     LET gsw!=FALSE                              ! Stimmwechselflag löschen
  5488.     @4_blockmarkierung_loeschen                 !
  5489.   ENDIF                                         !
  5490.   IF gs|=1 AND as|=2                            ! f von 1. auf 2. Stimme gew.
  5491.     LET gsw!=TRUE                               ! Stimmwechsel merken
  5492.     @4_alter_ton_aus_auf_kanal_1                ! Kanal 1 entspricht Stimme 1
  5493.   ELSE IF gs|=2 AND as|=1                       ! f von 2. auf 1. Stimme gew.
  5494.     LET gsw!=TRUE                               ! Stimmwechsel merken
  5495.     @4_alter_ton_aus_auf_kanal_2                ! Kanal 2 entspricht Stimme 2
  5496.   ENDIF                                         !
  5497.   LET gs|=as|                                   ! neue Stimme festsetzen
  5498.   ' ............................................................................
  5499.   IF p%>LEN(ga$(gs|))                           ! f verlangte Position>Endnote
  5500.     IF LEN(ga$(gs|))<gm%                        ! f Stück noch nicht voll:
  5501.       LET gc%=LEN(ga$(gs|))+1                   ! Cursor hinter Endnote
  5502.     ELSE                                        ! f Stück schon voll:
  5503.       LET gc%=gm%                               ! Cursor genau auf Endnote
  5504.     ENDIF                                       !
  5505.     @4_alter_ton_aus_auf_kanal_1                !
  5506.     @4_alter_ton_aus_auf_kanal_2                !
  5507.   ELSE                                          ! sonst
  5508.     @3_einzelnote_spln(gs|,ga$(1),ga$(2),p%,u%) !
  5509.     LET gc%=p%                                  ! Cursor unter Maus
  5510.   ENDIF                                         !
  5511.   ' ............................................................................
  5512.   @3_cursor_setzen                              !
  5513.   ' ----------------------------------------------------------------------------
  5514.   ' PROCEDURE 2_notenabspielen(a%,e%,u%)
  5515.   ' PROCEDURE 2_neuer_ton(u!,m|)
  5516.   ' PROCEDURE 2_taktstrich_setzen_loeschen
  5517.   ' PROCEDURE 2_gebundenzeichen_setzen_loeschen
  5518.   ' PROCEDURE 2_backspace
  5519.   ' PROCEDURE 2_laden
  5520.   ' PROCEDURE 2_block_kopieren(p%)
  5521.   ' PROCEDURE 2_block_loeschen
  5522.   ' PROCEDURE 2_blocknotenlaengen_verdoppeln
  5523.   ' PROCEDURE 2_undo
  5524.   ' ----------------------------------------------------------------------------
  5525. RETURN
  5526. > PROCEDURE 3_cursor_loeschen
  5527.   ' ----------------------------------------------------------------------------
  5528.   @3_ton_zeichnen(gc%,gs|)                      ! Cursor löschen
  5529.   IF gc%>=gba% AND gc%<=gbe% AND gs|=gbs|       ! f auf Blocknote:
  5530.     @6_blockmarkierung_einer_note(gc%)          !
  5531.   ENDIF                                         !
  5532.   ' ----------------------------------------------------------------------------
  5533. RETURN
  5534. > PROCEDURE 3_cursor_setzen
  5535.   ' ----------------------------------------------------------------------------
  5536.   LOCAL x%                                      ! x-Startkoordinate der Note
  5537.   LOCAL y%                                      ! y-Startkoordinate der Note
  5538.   LOCAL b$                                      ! Fotonegativstring
  5539.   ' ............................................................................
  5540.   LET x%=gx%(gs|,gc%)                           ! x-Startkoordinate der Note
  5541.   LET y%=gy%(gs|,gc%)                           ! y-Startkoordinate der Note
  5542.   PUT x%,y%,gb$(gs|,0)                          ! Leernote ausgeben
  5543.   LET b$=gb$(gs|,ASC(MID$(ga$(gs|),gc%,1)))     ! Notenfoto in Abk.variable
  5544.   PUT x%,y%,b$,8                                ! Note invers ausgeben
  5545.   ' ----------------------------------------------------------------------------
  5546. RETURN
  5547. > PROCEDURE 3_einzelnote_spln(s|,n1$,n2$,nr%,u%)
  5548.   ' ----------------------------------------------------------------------------
  5549.   ' s|                                          ! zu spielende Stimme
  5550.   ' n1$,n2$                                     ! Notenstrings für 1.,2.Stimme
  5551.   ' nr%                                         ! Notenplatznr der zu spiel.Nte
  5552.   ' u%                                          ! Tastaturumschaltcode 8=2stimg.
  5553.   LOCAL th|                                     ! Tonhöhe
  5554.   LOCAL x|                                      ! Stimmenzahl für Wavebefehl
  5555.   LOCAL g!                                      ! Flag für Attribut: Gebunden
  5556.   LOCAL u!                                      ! Flag für untere Klaviatur
  5557.   LOCAL t!                                      ! Flag für Taktstrich
  5558.   LOCAL mc!                                     ! Merke daß Codierungsnote da
  5559.   ' ............................................................................
  5560.   @4_alter_ton_aus_auf_kanal_3                  ! Schlagzeug aus (Taktstrich)
  5561.   ' ............................................................................
  5562.   '     T E I L  I :       ( 1 . S t i m m e )
  5563.   ' ............................................................................
  5564.   IF s|=2 AND u%<>8                             ! f 2.St.akt. und nicht Altern.
  5565.     GOTO stimme_2                               ! gleich 2.Stimme spielen
  5566.   ENDIF                                         !
  5567.   ' ............................................................................
  5568.   LET x|=x|+1                                   ! Stimme 1 ein für Wave-Befehl
  5569.   ' ............................................................................
  5570.   @4_tonanalyse(nr%,n1$,th|,t!,u!,g!)           ! Ton analysieren
  5571.   ' ............................................................................
  5572.   IF g! AND NOT t!                              ! f mit voriger Note gebunden:
  5573.     GOTO stimme_2                               ! gleich 2.Stimme spielen
  5574.   ELSE IF th|=25 AND u!=TRUE                    !
  5575.     @4_zufall                                   !
  5576.     GOTO stimme_2                               ! gleich 2.Stimme spielen
  5577.   ELSE IF g! AND t!                             ! Code für Sounds und Geschw.
  5578.     LET mc!=TRUE                                ! Merke daß Codierungsnote da
  5579.     @4_sounds_geschwindigkeit(1,th|,u!)         !
  5580.     GOTO stimme_2                               ! gleich 2.Stimme spielen
  5581.   ENDIF                                         !
  5582.   ' ............................................................................
  5583.   @4_alter_ton_aus_auf_kanal_1                  ! Kanal 1 entspricht Stimme 1
  5584.   ' ............................................................................
  5585.   IF t! AND gtaktschl!                          ! f Taktstrichflag gesetzt:
  5586.     @4_neuer_ton_ein_auf_kanal_3                ! Ton ein Kanal 3
  5587.     LET x|=x|+8                                 ! Rauschen für die erste Stimme
  5588.   ENDIF                                         !
  5589.   ' ............................................................................
  5590.   IF th|=0 OR th|=26                            ! f kein Ton vorliegt:
  5591.     LET x|=x|-1                                 ! Stimme doch nicht einschaltn
  5592.     GOTO stimme_2                               ! gleich 2.Stimme spielen
  5593.   ENDIF                                         !
  5594.   ' ............................................................................
  5595.   IF u!                                         ! f untere Klaviatur gefragt:
  5596.     LET th|=35+th|                              ! Midi-Kodierung
  5597.   ELSE                                          ! f obere Klaviatur gefragt:
  5598.     LET th|=59+th|                              ! Midi-Kodierung
  5599.   ENDIF                                         !
  5600.   @4_neuer_ton_ein_auf_kanal_1(th|)             ! Ton ein Kanal 1
  5601.   LET gat1|=th|                                 ! als alte Tonhöhe merken
  5602.   ' ............................................................................
  5603.   '     T E I L  I I  :       ( 2 . S t i m m e )
  5604.   ' ............................................................................
  5605. stimme_2:                                     ! Sprunglabel für vorher
  5606.   IF s|=1 AND u%<>8                             ! f 1.St.akt. und nicht Altern.
  5607.     GOTO raus_einzelnote_spielen                ! unverrichteter Dinge raus
  5608.   ENDIF                                         !
  5609.   ' ............................................................................
  5610.   LET x|=x|+2                                   ! Stimme 2 ein für Wave-Befehl
  5611.   ' ............................................................................
  5612.   @4_tonanalyse(nr%,n2$,th|,t!,u!,g!)           ! Ton analysieren
  5613.   ' ............................................................................
  5614.   IF g! AND NOT t!                              ! f mit voriger Note gebunden:
  5615.     GOTO raus_einzelnote_spielen                ! unverrichteter Dinge raus
  5616.   ELSE IF th|=25 AND u!=TRUE                    !
  5617.     @4_zufall                                   !
  5618.     GOTO raus_einzelnote_spielen                ! unverrichteter Dinge raus
  5619.   ELSE IF g! AND t!                             ! Code für Sounds und Geschw.
  5620.     LET mc!=TRUE                                ! Merke daß Codierungsnote da
  5621.     @4_tonanalyse(nr%,n1$,th|,t!,u!,g!)         ! Ton analysieren
  5622.     IF NOT u!                                   ! f Atr. f.unt.Kl.nicht gesetzt
  5623.       LET th|=th|+24                            ! umcodieren |1
  5624.     ENDIF                                       !
  5625.     IF g! AND t! AND th|>30                     ! f in 1.St.Code für Geschw.:
  5626.       @4_tonanalyse(nr%,n2$,th|,t!,u!,g!)       ! Ton analysieren
  5627.       @4_sounds_geschwindigkeit(3,th|,u!)       ! Schlagzeug beim Takt ändern
  5628.     ELSE                                        ! f in 1.St.kein Code für Ges.
  5629.       @4_tonanalyse(nr%,n2$,th|,t!,u!,g!)       ! Ton analysieren
  5630.       @4_sounds_geschwindigkeit(2,th|,u!)       !
  5631.     ENDIF                                       !
  5632.     GOTO raus_einzelnote_spielen                ! unverrichteter Dinge raus
  5633.   ENDIF                                         !
  5634.   ' ............................................................................
  5635.   @4_alter_ton_aus_auf_kanal_2                  ! Kanal 2 entspricht Stimme 2
  5636.   ' ............................................................................
  5637.   IF t! AND u%=0 AND gtaktschl!                 ! f Taktstrichflag gesetzt:
  5638.     @4_neuer_ton_ein_auf_kanal_3                ! Ton ein Kanal 3
  5639.     LET x|=x|+16                                ! Rauschen für die zweite Stimme
  5640.   ENDIF                                         !
  5641.   ' ............................................................................
  5642.   IF th|=0 OR th|=26                            ! f kein Ton vorliegt:
  5643.     LET x|=x|-2                                 ! Stimme doch nicht einschaltn
  5644.     GOTO raus_einzelnote_spielen                ! unverrichteter Dinge raus
  5645.   ENDIF                                         !
  5646.   ' ............................................................................
  5647.   IF u!                                         ! f untere Klaviatur gefragt:
  5648.     LET th|=35+th|                              ! Midi-Kodierung
  5649.   ELSE                                          ! f obere Klaviatur gefragt:
  5650.     LET th|=59+th|                              ! Midi-Kodierung
  5651.   ENDIF                                         !
  5652.   @4_neuer_ton_ein_auf_kanal_2(th|)             ! Ton ein Kanal 2
  5653.   LET gat2|=th|                                 ! als alte Tonhöhe merken
  5654.   ' ............................................................................
  5655. raus_einzelnote_spielen:                      !
  5656.   IF (NOT gmidi!) AND NOT mc!                   ! kein Midi & zuletzt keine Codn
  5657.     WAVE x|                                     ! Kanal an, GFA-Hanbuch: 6-69
  5658.   ENDIF                                         !
  5659.   ' ----------------------------------------------------------------------------
  5660. RETURN
  5661. > PROCEDURE 4_neuer_ton_ein_auf_kanal_1(i|)
  5662.   ' ----------------------------------------------------------------------------
  5663.   IF gmidi!                                     ! f Midi ein:
  5664.     OUT 3,144,i|,1                              ! Ton ein auf Kanal 1
  5665.   ELSE                                          ! f Midi aus
  5666.     LET i|=i|-35                                ! Midicode decodieren
  5667.     IF i|<25                                    ! f untere beiden Oktaven
  5668.       SOUND 1,15,i|,2                           ! Ton ein
  5669.     ELSE                                        ! f obere beiden Oktaven
  5670.       LET i|=i|-24                              !
  5671.       SOUND 1,15,i|,4                           ! Ton ein
  5672.     ENDIF                                       !
  5673.   ENDIF                                         !
  5674.   ' ----------------------------------------------------------------------------
  5675. RETURN
  5676. > PROCEDURE 4_neuer_ton_ein_auf_kanal_2(i|)
  5677.   ' ----------------------------------------------------------------------------
  5678.   IF gmidi!                                     ! f Midi ein:
  5679.     OUT 3,145,i|,1                              ! Ton ein auf Kanal 2
  5680.     IF i|-12>35                                 ! f noch auf Klaviatur
  5681.       OUT 3,145,i|-12,1                         ! Ton ein auf Kanal 2
  5682.     ENDIF                                       !
  5683.   ELSE                                          ! f Midi aus
  5684.     LET i|=i|-35                                ! Midicode decodieren
  5685.     IF i|<25                                    ! f untere beiden Oktaven
  5686.       SOUND 2,15,i|,2                           ! Ton ein
  5687.     ELSE                                        ! f obere beiden Oktaven
  5688.       LET i|=i|-24                              !
  5689.       SOUND 2,15,i|,4                           ! Ton ein
  5690.     ENDIF                                       !
  5691.   ENDIF                                         !
  5692.   ' ----------------------------------------------------------------------------
  5693. RETURN
  5694. > PROCEDURE 4_neuer_ton_ein_auf_kanal_3
  5695.   ' ----------------------------------------------------------------------------
  5696.   IF gmidi!                                     ! f Midi ein:
  5697.     OUT 3,146,gschl|+35,1                       ! Ton ein auf Kanal 3
  5698.   ENDIF                                         !
  5699.   ' ----------------------------------------------------------------------------
  5700. RETURN
  5701. > PROCEDURE 4_alter_ton_aus_auf_kanal_1
  5702.   ' ----------------------------------------------------------------------------
  5703.   IF gmidi!                                     ! f Midi ein:
  5704.     OUT 3,128+0,gat1|,1                         ! alter Ton aus auf Kanal 1
  5705.   ELSE                                          ! f Midi aus
  5706.   ENDIF                                         !
  5707.   ' ----------------------------------------------------------------------------
  5708.   ' PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  5709.   ' ----------------------------------------------------------------------------
  5710. RETURN
  5711. > PROCEDURE 4_alter_ton_aus_auf_kanal_2
  5712.   ' ----------------------------------------------------------------------------
  5713.   IF gmidi!                                     ! f Midi ein:
  5714.     OUT 3,128+1,gat2|,1                         ! alter Ton aus auf Kanal 2
  5715.     IF gat2|-12>35                              ! f noch auf Klaviatur
  5716.       OUT 3,128+1,gat2|-12,1                    ! alter Ton aus auf Kanal 2
  5717.     ENDIF                                       !
  5718.   ELSE                                          ! f Midi aus
  5719.   ENDIF                                         !
  5720.   ' ----------------------------------------------------------------------------
  5721.   ' PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  5722.   ' ----------------------------------------------------------------------------
  5723. RETURN
  5724. > PROCEDURE 4_alter_ton_aus_auf_kanal_3
  5725.   ' ----------------------------------------------------------------------------
  5726.   IF gmidi!                                     ! f Midi ein:
  5727.     OUT 3,130,gschl|                            ! alter Ton aus auf Kanal 3
  5728.   ELSE                                          ! f Midi aus
  5729.   ENDIF                                         !
  5730.   ' ----------------------------------------------------------------------------
  5731.   ' PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  5732.   ' ----------------------------------------------------------------------------
  5733. RETURN
  5734. > PROCEDURE 4_zufall
  5735.   ' ----------------------------------------------------------------------------
  5736.   LOCAL t|                                      !
  5737.   LOCAL i%                                      !
  5738.   ' ............................................................................
  5739.   FOR i%=1 TO 1000                              ! Tausend Noten zufällig
  5740.     LET t|=RANDOM(50)+1+35                         !
  5741.     @4_neuer_ton_ein_auf_kanal_1(t|)            ! Ton ein Kanal 1
  5742.     LET t|=RANDOM(50)+1+35                      !
  5743.     @4_neuer_ton_ein_auf_kanal_2(t|)            ! Ton ein Kanal 2
  5744.     LET gschl|=RANDOM(50)+1+35                  !
  5745.     @4_neuer_ton_ein_auf_kanal_3                ! Ton ein Kanal 3
  5746.     LET t|=RANDOM(50)+1                         !
  5747.     PAUSE t|                                    !
  5748.     EXIT IF INKEY$<>""
  5749.   NEXT i%                                       !
  5750.   ' ----------------------------------------------------------------------------
  5751. RETURN
  5752. > PROCEDURE 4_sounds_geschwindigkeit(s|,t|,u!)
  5753.   ' ----------------------------------------------------------------------------
  5754.   IF NOT u!                                     ! f Atr. f.unt.Kl.nicht gesetzt
  5755.     LET t|=t|+24                                ! umcodieren |1
  5756.   ENDIF                                         !
  5757.   ' ............................................................................
  5758.   IF s|=3                                       ! f Schlagzeug geändert w.soll
  5759.     LET gschl|=t|                               ! neues Schlagzeug
  5760.   ELSE IF t|>30                                 ! f Geschwindigkeitsänderung:
  5761.     LET t|=t|-30                                ! umcodieren
  5762.     LET gbasistonlaenge|=t|                     ! Wie lang soll ein Ton dauern
  5763.     LET gschl|=3                                ! normales Schlagzeug
  5764.   ELSE IF s|=1                                  ! f Soundänderung Stimme 1
  5765.     LET gk1|=t|-1                               ! Sound Kanal 1
  5766.   ELSE IF s|=2                                  ! f Soundänderung Stimme 2
  5767.     LET gk2|=t|-1                               ! Sound Kanal 2
  5768.   ENDIF                                         !
  5769.   @1_midi_sounds_setzen                         !
  5770.   ' ----------------------------------------------------------------------------
  5771.   ' |1:         Aus t| und u! wird hier ein neues t| produziert, das Zahlen
  5772.   '             von 1-49 beinhalten kann.
  5773.   ' ----------------------------------------------------------------------------
  5774. RETURN
  5775. ' ------------------------------------------------------------------------------
  5776. > PROCEDURE 1_klaviaturanalyse(m$,u%,n%)
  5777.   ' ----------------------------------------------------------------------------
  5778.   LOCAL midi|                                   ! Tonhöhencode
  5779.   LOCAL unt_klh!                                ! Flag für unt.Klav.hälfte setzn
  5780.   ' ............................................................................
  5781.   IF u%<>8 AND u%<>16+8                         ! f nicht Alternate gedrückt:
  5782.     IF n%<>3.73558E+06 AND n%<>3.01476E+06              ! f nicht Space oder 'c' gedr.:
  5783.       GOTO raus_klaviaturanalyse                ! Abbruch der Prozedur
  5784.     ENDIF                                       !
  5785.   ENDIF                                         !
  5786.   ' ............................................................................
  5787.   LET midi|=ASC(LEFT$(m$,1))                    ! Tonhöhe (midicodiert)feststlln
  5788.   IF midi|>59 AND midi|<85                      ! f Tonhöhe innerhlb Okt 3 und 4
  5789.     LET midi|=midi|-59                          ! auf Duedita-Kodierung bringen
  5790.   ELSE IF midi|>35 AND midi|<60                 ! f Tonhöhe innerhlb Okt 1 und 2
  5791.     LET midi|=midi|-35                          ! auf Duedita-Kodierung bringen
  5792.     LET unt_klh!=TRUE                           ! Flag für unt.Klav.hälfte setzn
  5793.   ELSE IF n%=3.73558E+06                            ! f Spacetaste gedrückt:
  5794.     LET midi|=26                                ! Code für Pause
  5795.   ELSE IF n%=3.01476E+06                            ! f 'c' gedrückt:
  5796.     LET midi|=25                                ! oberes c der unt. beiden Okt.
  5797.     LET unt_klh!=TRUE                           ! Flag für unt.Klav.hälfte setzn
  5798.   ELSE                                          ! f unerlaubte Midi-Daten:
  5799.     GOTO raus_klaviaturanalyse                  ! Abbruch der Prozedur
  5800.   ENDIF                                         !
  5801.   @2_neuer_ton(unt_klh!,midi|)                  !
  5802.   ' ............................................................................
  5803.   '  PRINT AT(1,1);m$;"' midi|='";midi|;"'    "
  5804. raus_klaviaturanalyse:                        ! Raus-label
  5805.   ' ............................................................................
  5806.   IF n%<>3.73558E+06 AND n%<>3.01476E+06                ! f Keyboardtaste gedrückt:
  5807.     PAUSE 10                                    ! Auf Midi-Müll warten
  5808.     REPEAT                                      ! Midi-Puffer löschen
  5809.     UNTIL INPMID$="" OR n%=3.73558E+06              !
  5810.   ELSE                                          ! f Computertaste gedrückt:
  5811.     @a_tastaturpuffer_leeren                    !
  5812.   ENDIF                                         !
  5813.   ' ----------------------------------------------------------------------------
  5814. RETURN
  5815. > PROCEDURE 2_neuer_ton(u!,m|)
  5816.   ' ----------------------------------------------------------------------------
  5817.   @3_ton_speichern(gc%,gs|,0,u!,0,m|)           !
  5818.   @3_ton_zeichnen(gc%,gs|)                      !
  5819.   @2_cursor_neu_setzen(gc%+1,0,gs|)             !
  5820.   ' ----------------------------------------------------------------------------
  5821. RETURN
  5822. > PROCEDURE 3_ton_speichern(p%,s|,t!,u!,g!,m|)
  5823.   ' ----------------------------------------------------------------------------
  5824.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  5825.   ' ............................................................................
  5826.   LET a|=m|+32*ABS(t!)+64*ABS(u!)+128*ABS(g!)   ! Tonhöhe + Attribut Unt.Kl.!=u!
  5827.   ' ............................................................................
  5828.   IF p%>1                                       ! f es mehr als 1 Ton gibt:
  5829.     @4_tonanalyse(p%-1,ga$(s|),th|,t!,u!,g!)    ! Ton analysieren
  5830.     IF th|=m| AND th|<>26 AND th|<>26+32        ! f gleiche Tonhöhe,keine Pause
  5831.       LET a|=BSET(a|,7)                         ! Attribut gebunden löschen
  5832.     ENDIF                                       !
  5833.   ENDIF                                         !
  5834.   ' ............................................................................
  5835.   IF MID$(ga$(s|),p%,1)=""                      ! f an gefragter Stelle nix ist
  5836.     LET ga$(s|)=ga$(s|)+" "                     ! Leerplatz schaffen
  5837.   ENDIF                                         !
  5838.   MID$(ga$(s|),p%,1)=CHR$(a|)                   ! Abkürzung an Speicherstrng üb.
  5839.   ' ----------------------------------------------------------------------------
  5840. RETURN
  5841. > PROCEDURE 4_tonanalyse(p%,n$,VAR th|,taktstr!,unt_kl!,gebunden!)
  5842.   ' ----------------------------------------------------------------------------
  5843.   ' n$                                          ! |1
  5844.   LOCAL a$                                      ! Byte der Notencharakteristik
  5845.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  5846.   ' ............................................................................
  5847.   LET a|=ASC(MID$(n$,p%,1))                     ! Notencharakteristik Abkürzen
  5848.   LET a$=BIN$(a|,8)                             ! Notenchar. als Byte darstellen
  5849.   LET gebunden!=(-1)*VAL(MID$(a$,1,1))          ! Gebundenflag
  5850.   LET unt_kl!=(-1)*VAL(MID$(a$,2,1))            ! Unt.Kl.flag
  5851.   LET taktstr!=(-1)*VAL(MID$(a$,3,1))           ! Taktstrichflag
  5852.   LET th|=VAL("%"+MID$(a$,4,5))                 ! Tonhöhe
  5853.   ' ----------------------------------------------------------------------------
  5854.   ' |1:         Im Normalfall wird n$=ga$(s|) sein, aber um auch etwas anderes
  5855.   '             zuzulassen, z.B. in '4_best_st_direkt_hintereinander_sp',
  5856.   '             wird hier mit Übergabestring gearbeitet.
  5857.   ' ----------------------------------------------------------------------------
  5858. RETURN
  5859. > PROCEDURE 3_ton_zeichnen(p%,s|)
  5860.   ' ----------------------------------------------------------------------------
  5861.   LOCAL a|                                      ! Abkürzung für Speicherinhalt
  5862.   ' ............................................................................
  5863.   LET a|=ASC(MID$(ga$(s|),p%,1))                ! Notencharakteristik Abkürzen
  5864.   PUT gx%(s|,p%),gy%(s|,p%),gb$(s|,a|)          ! Note zeichnen
  5865.   ' ----------------------------------------------------------------------------
  5866.   ' PROCEDURE 2_taktstrich_setzen_loeschen
  5867.   ' PROCEDURE 2_cursor_neu_setzen(p%,u%,as|)
  5868.   ' ----------------------------------------------------------------------------
  5869. RETURN
  5870. ' ##############################################################################
  5871. '  M I N I B I B L I O T H E K :
  5872. ' ##############################################################################
  5873. > PROCEDURE s
  5874.   ' ----------------------------------------------------------------------------
  5875.   LOCAL bld$                                    ! Bildrettungsstring
  5876.   ' ............................................................................
  5877.   SGET bld$                                     ! Bild retten
  5878.   HIDEM                                         ! Maus weg
  5879.   @a_tastaturpuffer_leeren                      !
  5880.   PBOX 0,0,639,399                              ! Alles schwarz
  5881.   @a_auf_taste_warten                           !
  5882.   SPUT bld$                                     ! Bild retten
  5883.   SHOWM                                         ! Maus her
  5884.   ' ----------------------------------------------------------------------------
  5885.   ' Diese Prozedur hat nur den Namen 's', damit man sie auch vom Interpreter
  5886.   ' aus schnell aufrufen kann.
  5887.   ' ----------------------------------------------------------------------------
  5888. RETURN
  5889. > PROCEDURE a_info(info$)
  5890.   ' ----------------------------------------------------------------------------
  5891.   PRINT AT(1,1);info$+SPACE$(80-LEN(info$))     !
  5892.   ' ----------------------------------------------------------------------------
  5893. RETURN
  5894. > PROCEDURE a_gepunktete_linie
  5895.   ' ----------------------------------------------------------------------------
  5896.   DEFLINE &X11111111111111111010101010101011,1,0,0  ! gepunktete Linie
  5897.   ' ----------------------------------------------------------------------------
  5898. RETURN
  5899. > PROCEDURE a_tastaturpuffer_leeren
  5900.   ' ----------------------------------------------------------------------------
  5901.   LOCAL n%                                      !
  5902.   ' ............................................................................
  5903.   REPEAT                                        !
  5904.     KEYLOOK n%                                  !
  5905.     IF n%                                       !
  5906.       KEYGET n%                                 !
  5907.     ENDIF                                       !
  5908.   UNTIL n%=0                                    !
  5909.   ' ----------------------------------------------------------------------------
  5910. RETURN
  5911. > PROCEDURE a_mauspuffer_leeren
  5912.   ' ----------------------------------------------------------------------------
  5913.   PAUSE 4                                       !
  5914.   REPEAT                                        ! Mauspuffer leeren
  5915.   UNTIL NOT MOUSEK                              !
  5916.   ' ----------------------------------------------------------------------------
  5917. RETURN
  5918. > PROCEDURE a_midi_analyse
  5919.   ' ----------------------------------------------------------------------------
  5920.   DO                                            !
  5921.     LET a$=INPMID$                              !
  5922.     IF a$<>""                                   !
  5923.       PRINT a$,LEN(a$)                          !
  5924.       PAUSE 10                                  !
  5925.       REPEAT                                    ! Midi-Puffer löschen
  5926.       UNTIL INPMID$=""                          !
  5927.     ENDIF                                       !
  5928.   LOOP                                          !
  5929.   EDIT                                          !
  5930.   ' ----------------------------------------------------------------------------
  5931. RETURN
  5932. > PROCEDURE a_fehler_abfangen
  5933.   ' ----------------------------------------------------------------------------
  5934.   ' Im Falle daß ein Fehler im Programmablauf auftaucht, wird wegen des aller-
  5935.   ' ersten Befehls des Programms 'on error gosub a_fehler_abfangen' hierher-
  5936.   ' gesprungen. So kann dann der Text erst einmal gerettet werden:
  5937.   ' ----------------------------------------------------------------------------
  5938.   LOCAL d|                                      ! Dummy für Alertbox
  5939.   ' ............................................................................
  5940.   PRINT CHR$(7);                                ! klingeln
  5941.   PRINT AT(1,3);ERR$(ERR);" Fatal=";FATAL       ! Außerhalb GFA-Basic?
  5942.   ' ............................................................................
  5943.   ERASE g!()                                    ! Boolearray für Menü |1
  5944.   @a_alert("Programmfehler!/Abspeichern!",d|)   !
  5945.   ' ............................................................................
  5946.   @4_hauptfile_abspeichern                      !
  5947.   ' ............................................................................
  5948.   ERASE h$()                                    ! Hauptmenüeintragsliste
  5949.   @0_oberste_schleife_hauptprogramm             ! ob's noch weiter geht?
  5950.   ' ----------------------------------------------------------------------------
  5951.   ' |1:         Dieser Boolarray taucht in mehreren Prozeduren auf, immer dann,
  5952.   '             wenn die große Menüprozedur meiner Menübibliothek aufgerufen
  5953.   '             wird. Bei Alert wird diese auch aufgerufen und der Boolarray
  5954.   '             g!() wieder neu dimensioniert. Damit dann kein zusätzlicher
  5955.   '             Fehler auftauchen kann, wird er vorsichtshalber vor dem
  5956.   '             a_alert-Aufruf gelöscht.
  5957.   ' ----------------------------------------------------------------------------
  5958. RETURN
  5959. > PROCEDURE a_zeichnen_und_punkte_abspeichern
  5960.   ' ----------------------------------------------------------------------------
  5961.   ' Prg zum Zeichnen eines Strichbildes und zum Absp. der Punkte 'ZCHNABSP.GFA'
  5962.   ' ----------------------------------------------------------------------------
  5963.   '  @a_zeichnen_und_punkte_abspeichern         !
  5964.   '  @a_rekonstruktionszeichnung                ! entspricht 1_notenschluessel
  5965.   ' ----------------------------------------------------------------------------
  5966.   LOCAL t|                                      ! Maustaste
  5967.   LOCAL m|                                      ! Auswahl bei Alertbox
  5968.   LOCAL i%                                      ! Linienzähler
  5969.   LOCAL x%,y%,mx%,my%                           ! Punkte
  5970.   LOCAL a$                                      ! Alertboxtext / DATA-LINE
  5971.   DIM p%(1000,4)                                ! Liniendaten (je Linie 4)
  5972.   ' ............................................................................
  5973. nochmal_zeichnen:                             !
  5974.   CLR mx%,my%,i%                                !
  5975.   REPEAT                                        !
  5976.     MOUSE x%,y%,t|                              !
  5977.     IF t|=1                                     !
  5978.       IF mx%<>0 AND my%<>0                      !
  5979.         LINE x%,y%,mx%,my%                      !
  5980.         SHOWM                                   !
  5981.         PAUSE 5                                 !
  5982.         INC i%                                  !
  5983.         LET p%(i%,1)=x%                         !
  5984.         LET p%(i%,2)=y%                         !
  5985.         LET p%(i%,3)=mx%                        !
  5986.         LET p%(i%,4)=my%                        !
  5987.       ENDIF                                     !
  5988.       IF i%=999                                 !
  5989.         ALERT 1,"zuviel!",1,"Abbruch",w|        !
  5990.         LET t|=2                                !
  5991.       ENDIF                                     !
  5992.       LET mx%=x%                                !
  5993.       LET my%=y%                                !
  5994.     ELSE                                        !
  5995.       CLR mx%,my%                               !
  5996.     ENDIF                                       !
  5997.   UNTIL t|=2                                    !
  5998.   ' ............................................................................
  5999.   a$="speichern/nochmal/abbrechen"              !
  6000.   ALERT 1,a$,2,"sp|nochm|abbr",w|
  6001.   IF w|=2                                       !
  6002.     GOTO nochmal_zeichnen                       !
  6003.   ELSE IF w|=3                                  !
  6004.     GOTO ende_zeichnen_abspeichern              !
  6005.   ENDIF                                         !
  6006.   ' ............................................................................
  6007.   OPEN "O",#1,"ZCHNDATN.LST"                    !
  6008.   FOR j%=1 TO i%                                !
  6009.     LET a$="DATA "                              !
  6010.     FOR k%=1 TO 4                               !
  6011.       LET a$=a$+STR$(p%(j%,k%))+","             !
  6012.     NEXT k%                                     !
  6013.     LET a$=LEFT$(a$,LEN(a$)-1)                  ! letztes Komma weg
  6014.     PRINT #1,a$                                 !
  6015.   NEXT j%                                       !
  6016.   CLOSE #1                                      !
  6017.   ' ............................................................................
  6018. ende_zeichnen_abspeichern:                    !
  6019.   ERASE p%()                                    !
  6020.   ' ----------------------------------------------------------------------------
  6021. RETURN
  6022. > PROCEDURE a_nat_zahl_test(k$,VAR k!)
  6023.   ' ----------------------------------------------------------------------------
  6024.   ' Diese Prozedur schaut, ob in k$ eine natürliche Zahl (0,1,2,3,...). Falls
  6025.   ' ja, setzt sie den Rückgabeparameter: k!=TRUE, falls nein: k!=FALSE.
  6026.   ' ----------------------------------------------------------------------------
  6027.   ' k$                                          ! Eingabe,die getestet werd soll
  6028.   ' k!                                          ! soll(-1) werden,fEing.nat.Zahl
  6029.   LOCAL i%                                      ! Zeichenzähler für Eingabe
  6030.   LET k!=TRUE                                   ! Seien wir optimistisch
  6031.   ' ............................................................................
  6032.   FOR i%=1 TO LEN(k$)                           ! Alle Stellen der Eingabe durch
  6033.     LET a|=ASC(MID$(k$,i%,1))                   ! Ascii-Code der i%-ten Stelle
  6034.     IF a|<48 OR a|>57                           ! f an i%-Stelle keine Ziffer:
  6035.       LET k!=FALSE                              ! Aus der Traum...
  6036.     ENDIF                                       !
  6037.   NEXT i%                                       ! nächste Stelle der Eingabe
  6038.   ' ----------------------------------------------------------------------------
  6039. RETURN
  6040. > PROCEDURE a_auf_taste_warten
  6041.   ' ----------------------------------------------------------------------------
  6042.   REPEAT                                        ! Maus- und Tastaturpuffer
  6043.   UNTIL MOUSEK=0 AND INKEY$=""                  ! entleeren.
  6044.   REPEAT                                        ! Warteschleife
  6045.   UNTIL INKEY$<>"" OR MOUSEK<>0                 !
  6046.   ' ----------------------------------------------------------------------------
  6047. RETURN
  6048. ' ##############################################################################
  6049. '  M E N Ü B I B L I O T H E K :
  6050. ' ##############################################################################
  6051. > PROCEDURE a_alert(a1$,VAR w1|)
  6052.   t0t|=21
  6053.   ' ----------------------------------------------------------------------------
  6054.   ' Diese Prozedur entspricht einer Gem-Alertbox, es sind aber viel mehr
  6055.   ' Einträge möglich.
  6056.   ' Ein Alertübergabestring (Bsp.: "Hallo|Du ! Bist Du's ?/Ja|Nein") besteht
  6057.   ' aus einem Teil der nur angezeigt wird (der steht vor dem '/') und einem
  6058.   ' Teil, bei dem man aus den verschiedenen Einträgen auswählen kann (der
  6059.   ' steht hinter dem '/'). Beide Teile zusammen dürfen höchstens 20 Einträge
  6060.   ' haben, die höchstens 78 Zeichen breit sind
  6061.   ' ----------------------------------------------------------------------------
  6062.   LOCAL i1%                 ! Zähler für Analyse des Menüeintragsstrings
  6063.   LOCAL i1|                 ! Zähler für Analyse des Menüeintragsstrings
  6064.   LOCAL j1|                 ! Zähler für Menüeintrage (erst nicht,dann whlb)
  6065.   LOCAL l1|                 ! Längenmaximum aller Einträge
  6066.   LOCAL mxb1|               ! Maximum der nur anzuzeigenden Menüeinträge
  6067.   LOCAL mxw1|               ! Maximum der wählbaren Menüeinträge
  6068.   LOCAL bld1$               ! Bildspeicher
  6069.   LOCAL sx1|                ! Start-x-Spalte der Einträge
  6070.   LOCAL sy1|                ! Start-y-Zeile  der Einträge
  6071.   DIM x!(gm|)               ! Boolearray für Menü
  6072.   ' ............................................................................
  6073.   FOR i1%=1 TO LEN(a1$)         ! String durch
  6074.     IF MID$(a1$,i1%,1)="|"      ! Grenze errcht
  6075.       INC j1|                   ! Zählr erhöh.
  6076.     ENDIF                       !
  6077.     IF MID$(a1$,i1%,1)="/"      ! Grenze errcht
  6078.       LET mxb1|=j1|+1           ! Mx nur Bild
  6079.       CLR j1|                   ! Zähler null
  6080.     ENDIF                       !
  6081.   NEXT i1%                      ! nächst Buchst
  6082.   LET mxw1|=j1|+1               ! Mx wählbar
  6083.   ' ............................................................................
  6084.   DIM b1$(mxb1|)        ! Array für Menü mit nur angezeigten Eintägen
  6085.   DIM w1$(mxw1|)        ! Array für Menü mit wählbaren Eintägen
  6086.   ' ............................................................................
  6087.   ' Jetzt werden erst 'mal die Nurbildeinträge ausgefiltert
  6088.   LET j1|=1                                 ! Eintragszähler 1
  6089.   FOR i1|=1 TO LEN(a1$)                     ! aString durch
  6090.     LET mi1$=MID$(a1$,i1|,1)                ! akt. Zchn merken
  6091.     IF mi1$="|" OR mi1$="/"                 ! Eintragsgrenze errcht
  6092.       LET b1$(j1|)=LEFT$(a1$,i1|-1)         ! Nurbildeintrag setzen
  6093.       IF l1|<LEN(b1$(j1|))                  ! F neues Längenmaximum
  6094.         LET l1|=LEN(b1$(j1|))               ! übernehmen
  6095.       ENDIF                                 !
  6096.       LET a1$=RIGHT$(a1$,LEN(a1$)-i1|)      ! aString kürzen
  6097.       CLR i1|                               ! Zeichenzähler null
  6098.       INC j1|                               ! Eintragszählr erhöh.
  6099.     ENDIF                                   !
  6100.     EXIT IF mi1$="/"                        ! Menügrenze errcht
  6101.   NEXT i1|                                  ! nächst Buchst
  6102.   LET a1$=RIGHT$(a1$,LEN(a1$)-i1|)          ! aString kürzen
  6103.   ' ............................................................................
  6104.   ' Jetzt werden die Wahleinträge ausgefiltert
  6105.   LET j1|=1                                 ! Eintragszähler 1
  6106.   REPEAT                                    ! aString durch
  6107.     INC i1|                                 ! nächste Zeichennummer
  6108.     LET mi1$=MID$(a1$,i1|,1)                ! akt. Zchn merken
  6109.     IF mi1$="|" OR mi1$="/"                 ! Eintragsgrenze errcht
  6110.       LET w1$(j1|)=LEFT$(a1$,i1|-1)         ! Wahleintrag setzen
  6111.       IF l1|<LEN(w1$(j1|))                  ! F neues Längenmaximum
  6112.         LET l1|=LEN(w1$(j1|))               ! übernehmen
  6113.       ENDIF                                 !
  6114.       LET a1$=RIGHT$(a1$,LEN(a1$)-i1|)      ! aString kürzen
  6115.       CLR i1|                               ! Zeichenzähler null
  6116.       INC j1|                               ! Eintragszählr erhöh.
  6117.     ENDIF                                   !
  6118.   UNTIL i1|=LEN(a1$)                        ! aString ganz durch
  6119.   LET w1$(j1|)=a1$                          ! Wahleintrag setzen
  6120.   ' ............................................................................
  6121.   IF b1$(1)<>""                             !
  6122.     LET b1$(1)=LEFT$(b1$(1)+SPACE$(l1|),l1|)! Mit Spaces auffüllen
  6123.   ENDIF                                     !
  6124.   IF w1$(1)<>""                             !
  6125.     LET w1$(1)=LEFT$(w1$(1)+SPACE$(l1|),l1|)! Mit Spaces auffüllen
  6126.   ENDIF                                     !
  6127.   ' ............................................................................
  6128.   LET sx1|=ROUND((80-l1|)/2)                ! Startspalte
  6129.   LET sy1|=ROUND((22-mxb1|)/2)              ! Startzeile
  6130.   ' ............................................................................
  6131.   ' Alertausschnitt (Kasten, der der Alertbox entspricht) ausschneiden, retten:
  6132.   GET (sx1|-1)*8-1,(sy1|-1)*16,sx1|*8+l1|*8,sy1|*16+(mxb1|+mxw1|)*16,bld1$
  6133.   ' ............................................................................
  6134.   @m(0,-1,0,0,0,0,-1,sx1|,sy1|,1,mxb1|,dummy1|,dummy1|,b1$(),x!())
  6135.   REPEAT                                    ! Solange neues Menü,
  6136.     @m(0,-1,-1,-1,0,0,-1,sx1|,sy1|+mxb1|,1,mxw1|,dummy1|,w1|,w1$(),x!())
  6137.   UNTIL w1|<>0                              ! bis Eintrag gewählt
  6138.   ' ............................................................................
  6139.   PUT (sx1|-1)*8-1,(sy1|-1)*16,bld1$        ! Alertausschnitt zurück
  6140.   ' ............................................................................
  6141.   ERASE b1$()       ! Array für Menü mit nur angezeigten Eintägen
  6142.   ERASE w1$()       ! Array für Menü mit wählbaren Eintägen
  6143.   ERASE x!()                                ! Boolearray für Menü
  6144.   ' ----------------------------------------------------------------------------
  6145. RETURN
  6146. > PROCEDURE m(iv!,ad!,wv!,we1!,wex!,inp!,rmn!,sx|,sy|,sp|,zl|,VAR m|,w|,a$(),a!())
  6147.   t0t|=22
  6148.   ' ----------------------------------------------------------------------------
  6149.   ' Mit dieser Prozedur kann man ein Menü erzeugen. Dessen Einträge müssen
  6150.   ' sich im Übergabearray a$() befinden. Welcher Eintrag gewählt wurde,
  6151.   ' erfährt man nach Prozedurende im Rückgabeparametzer w|. Es gibt
  6152.   ' einige Zusätzliche Einstellungen, die im folgenden aufgelistet sind:
  6153.   ' ----------------------------------------------------------------------------
  6154.   '
  6155.   ' Übergabevariablen:
  6156.   '
  6157.   ' iv!  = Invertierte Darstellung des Eintrags belassen (-1) oder nicht (0) ?
  6158.   ' ad!  = Auch Darstellung des Menüs ? nein=0, ja=-1
  6159.   ' wv!  = Wahlvorschlag (1.Eintrag) ein (-1) oder aus (0)
  6160.   ' we1! = wählbare Einträge(nur 1) (-1) oder nicht (0: also Menü nur abbilden)
  6161.   ' wex! = alle (insbes. mehr als ein Eintrag) Einträge wählbar ? ja=-1, nein=0
  6162.   ' inp! = Input (-1:schließt bis jetzt wex!=-1 aus!) oder nicht (0)
  6163.   ' rmn! = Rahmen (-1) oder nicht (0)
  6164.   ' sx|  = Start-x-Koordinate (in Zeichen) von Menüeinträgen links
  6165.   ' sy|  = Start-y-Koordinate (in Zeichen) von Menüeinträgen oben
  6166.   ' sp|  = Spaltenanzahl der Menüeinträge
  6167.   ' zl|  = Zeilenanzahl der Menüeinträge
  6168.   ' m|   = Maustastennummer 1=linke, 2=rechte Maustaste  zurück !
  6169.   ' w|   = Wahlnummer des gewählten Eintrages            zurück ! (0=Abbruch)
  6170.   ' a$() = Eintragsarray, hier sind alle Einträge drin   auch zurück !
  6171.   ' a!() = Wahlarray hier steht an erster Stelle eine 0, falls der entsprechende
  6172.   '        Eintrag in a$() nicht gewählt und -1, falls er gewählt.
  6173.   '
  6174.   ' ............................................................................
  6175.   LOCAL di|        ! Die Anzahl der Spaces, die wegen der Inputfunktion
  6176.   '                ! jedem Eintrag hinten drangefügt werden (in letzter
  6177.   '                ! Procedure wieder abgezogen)
  6178.   LOCAL ml|        ! Eintragslängenmaximum
  6179.   ' ............................................................................
  6180.   REPEAT                                        ! Maus- und Tastaturpuffer
  6181.   UNTIL MOUSEK=0 AND INKEY$=""                  ! entleeren.
  6182.   ' ............................................................................
  6183.   @a_menueeintraege_maximieren(sp|,zl|,ml|,di|,a$())    !
  6184.   IF rmn!=TRUE                                          ! Mit Rahmen
  6185.     @a_menuerahmen(ml|,sx|,sy|,sp|,zl|)                 !
  6186.   ENDIF                                                 !
  6187.   IF we1!=0 AND ad!                                     ! Menü nur anzgen
  6188.     @a_menue_anzeigen(ml|,sx|,sy|,sp|,zl|,a$())         !
  6189.   ELSE IF inp!=0                                        ! Wählen oh.Input
  6190.     IF ad!                                              ! f auch darstellen
  6191.       @a_menue_anzeigen(ml|,sx|,sy|,sp|,zl|,a$())       !
  6192.     ENDIF                                               !
  6193.     IF wex!                                             ! F alle Einträge wählb.
  6194.       @a_eintraege_waehlen(wv!,ml|,sx|,sy|,sp|,zl|,a$(),a!(),m|,w|) !
  6195.     ELSE                                                ! F nur 1 Eintrag wählb.
  6196.       @a_eintrag_waehlen(iv!,wv!,ml|,sx|,sy|,sp|,zl|,a$(),m|,w|) !
  6197.     ENDIF                                               !
  6198.   ELSE                                                  ! Wähln mit Input
  6199.     IF ad!                                              ! f auch darstellen
  6200.       @a_menue_anzeigen(ml|,sx|,sy|,sp|,zl|,a$())       !
  6201.     ENDIF                                               !
  6202.     @a_eintrag_waehlen(iv!,wv!,ml|,sx|,sy|,sp|,zl|,a$(),m|,w|) !
  6203.     IF w|<>0                                            ! F Eintrag gew.
  6204.       @a_eintraginput(ml|,di|,sx|,sy|,sp|,zl|,m|,w|,a$())  !
  6205.       IF a$(w|)="        "                              ! F nix eingeg.
  6206.         LET w|=0                                        ! Abbruchcode
  6207.       ENDIF                                             !
  6208.     ENDIF                                               !
  6209.   ENDIF                                                 !
  6210.   @a_menueeintraege_minus_di8(sp|,zl|,ml|,di|,a$())     ! Inputzusatz wiederweg
  6211.   ' ----------------------------------------------------------------------------
  6212. RETURN
  6213. > PROCEDURE a_menueeintraege_maximieren(sp3|,zl3|,VAR ml3|,di3|,a3$())
  6214.   t2t|=23
  6215.   ' ----------------------------------------------------------------------------
  6216.   ' Hier werden alle Einträge mit Spaces aufgefüllt, bis sie alle gleich
  6217.   ' lang sind.
  6218.   ' ----------------------------------------------------------------------------
  6219.   '     di3|                        ! Zusätzliche Spaces am Ende jedes
  6220.   '                                 ! Eintrages, um nachher korrektes
  6221.   '                                 ! Input zu ermöglichen
  6222.   '                                 ! Diese Variable ist Rückgabeparameter
  6223.   '     ml3|                        ! Eintragslängenmaximum ist "
  6224.   ' ............................................................................
  6225.   LOCAL i3|                         ! Zähler für Einträge
  6226.   ' ............................................................................
  6227.   LET di3|=1                        ! Für Input zusätliche di3| Spaces
  6228.   LET ml3|=0                        ! Eintragslängenmaximum null setzen
  6229.   ' ............................................................................
  6230.   FOR i3|=1 TO sp3|*zl3|            ! Alle Einträge durch
  6231.     IF LEN(a3$(i3|))>ml3|           ! Falls Eintrag größer als bisher
  6232.       LET ml3|=LEN(a3$(i3|))        ! Maximum Eintraglänge neu setzen
  6233.     ENDIF                           !
  6234.   NEXT i3|                          ! nächster Eintrag
  6235.   ' ............................................................................
  6236.   FOR i3|=1 TO sp3|*zl3|                      !Alledurch
  6237.     a3$(i3|)=LEFT$(a3$(i3|)+SPACE$(ml3|),ml3|)!Auffüllen
  6238.     a3$(i3|)=a3$(i3|)+SPACE$(di3|)            !für Input
  6239.   NEXT i3|                                    ! nächster
  6240.   ' ............................................................................
  6241.   ADD ml3|,di3|                               ! Eintragslänge anpassen
  6242.   ' ----------------------------------------------------------------------------
  6243. RETURN
  6244. > PROCEDURE a_menuerahmen(ml4|,sx4|,sy4|,sp4|,zl4|)
  6245.   t2t|=24
  6246.   ' ----------------------------------------------------------------------------
  6247.   ' In dieser Prozedur erhält das kommende Menü einen Rahmen.
  6248.   ' ----------------------------------------------------------------------------
  6249.   LOCAL dx4|        ! Distanz zwischen Rahmen und Eintragsrand in x-Richtung
  6250.   LOCAL dy4|        ! Distanz zwischen Rahmen und Eintragsrand in y-Richtung
  6251.   LOCAL lx4%        ! Position des Rahmens links
  6252.   LOCAL oy4%        ! Position des Rahmens oben
  6253.   LOCAL rx4%        ! Position des Rahmens rechts
  6254.   LOCAL uy4%        ! Position des Rahmens unten
  6255.   ' ............................................................................
  6256.   LET dx4|=1                                        ! Randabstand x
  6257.   LET dy4|=1                                        ! Randabstand y
  6258.   LET lx4%=(sx4|-1)*8-dx4|                          ! Links
  6259.   LET oy4%=sy4|*16-dy4|                             ! Oben
  6260.   LET rx4%=lx4%+ml4|*sp4|*8+dx4|                    ! Rechts
  6261.   LET uy4%=oy4%+zl4|*16+dy4|                        ! Unten
  6262.   ' ............................................................................
  6263.   BOX lx4%,oy4%,rx4%,uy4%                           ! Rahmen Zeichnen
  6264.   ' ----------------------------------------------------------------------------
  6265. RETURN
  6266. > PROCEDURE a_menue_anzeigen(ml5|,sx5|,sy5|,sp5|,zl5|,VAR a5$())
  6267.   t2t|=25
  6268.   ' ----------------------------------------------------------------------------
  6269.   ' In dieser Prozedur wird das Menü erst einmal nur angezeigt. Wählen kann
  6270.   ' man hier also noch nicht.
  6271.   ' ----------------------------------------------------------------------------
  6272.   LOCAL i5|         ! Spaltenzähler für Eintragsspalten
  6273.   LOCAL j5|         ! Zeilenzähler  für Eintragsszeilen
  6274.   LOCAL k5|         ! Eintragszähler
  6275.   ' ............................................................................
  6276.   FOR i5|=1 TO sp5|         ! Alle Spalten durch
  6277.     FOR j5|=1 TO zl5|       ! Alle Zeilen durch
  6278.       INC k5|               ! Nächster Eintrag; Ausgeben:
  6279.       PRINT AT(sx5|+(i5|-1)*ml5|,sy5|+j5|);a5$(k5|)
  6280.     NEXT j5|                ! Nächste Zeile
  6281.   NEXT i5|                  ! Nächste Spalte
  6282.   ' ----------------------------------------------------------------------------
  6283. RETURN
  6284. > PROCEDURE a_eintrag_waehlen(iv!,wv!,ml|,sx|,sy|,sp|,zl|,VAR a$(),m|,w|)
  6285.   t2t|=26
  6286.   ' ----------------------------------------------------------------------------
  6287.   ' Diese Prozedur sorgt dafür, daß der Menüeintrag, auf den die Maus gerade
  6288.   ' zeigt, invers dargestellt wird. Dabei wird natürlich der letzte Eintrag
  6289.   ' wieder normal dargestellt. Falls der erste Übergabeparameter wv!
  6290.   ' wahr ist, so wird der erste Eintrag beim Aufruf der Prozedur automatisch
  6291.   ' invers dargestellt, so daß die Maus gar nicht mehr gebraucht wird. Ein
  6292.   ' Druck auf die [Return]-Taste reicht, um den vorgeschlagenen Eintrag als
  6293.   ' gewählt zu betrachten und die Prozedur zu verlassen. Statt der [Return]-
  6294.   ' Taste kann man auch die linke Maustaste zum entültigen wählen benutzen.
  6295.   ' ----------------------------------------------------------------------------
  6296.   LOCAL mef!               ! Maus nicht auf Menüeintrag ?
  6297.   LOCAL erst!              ! Erster Durchgang ?
  6298.   LOCAL bs!                ! Bildschirm schwarz gewesen ?
  6299.   LOCAL i|                 ! Hier steht die Eintragsnummer
  6300.   LOCAL n%                 ! Tastencode
  6301.   LOCAL t%                 ! Zeitmesser für Bildschirmabschaltung
  6302.   LOCAL x%                 ! Maus-x-Koordinate
  6303.   LOCAL y%                 ! Maus-y-Koordinate
  6304.   LOCAL sm%                ! Die Spalte, auf die die Maus gerade zeigt
  6305.   LOCAL zm%                ! Die Zeile, auf die die Maus gerade zeigt
  6306.   LOCAL ms%                ! Speicher für sm%
  6307.   LOCAL mz%                ! Speicher für mz%
  6308.   LOCAL st%                ! Spaltenterm
  6309.   LOCAL zt%                ! Zeilenterm
  6310.   LOCAL mx%                ! Speicher für x-Koordinate
  6311.   LOCAL my%                ! Speicher für y-Koordinate
  6312.   LOCAL b$                 ! Negativspeicher für Bildschirmrettung
  6313.   ' ............................................................................
  6314.   LET erst!=TRUE           ! Erster Durchgang
  6315.   ' ............................................................................
  6316.   REPEAT                   ! Mausabfrageschleife
  6317.     ' ..........................................................................
  6318.     LET mef!=FALSE         ! Maus ist erst mal evtl. auf Menüeintrag
  6319.     ' ..........................................................................
  6320.     IF NOT bs!             ! F Bildschirm nicht schwarz:
  6321.       SHOWM                ! Mauszeiger bitte an und zwar immer !!!
  6322.     ENDIF                  !
  6323.     ' ..........................................................................
  6324.     LET x%=MOUSEX          ! Maus-x-Koordinate
  6325.     LET y%=MOUSEY          ! Maus-y-Koordinate
  6326.     ' ..........................................................................
  6327.     '                      ! S c h w a r z s c h a l t u n g :
  6328.     INC t%                 ! Zeitmesser raufsetzen
  6329.     IF t%=40000            ! F Zeit für Bildschirmabschaltung:
  6330.       HIDEM                ! Maus weg
  6331.       IF bs!=FALSE         ! F Bildschirm bisher noch nicht schwarz
  6332.         SGET b$            ! Bildschirm retten
  6333.       ENDIF                !
  6334.       PBOX 0,0,gbb%,gbh%   ! Bildschirm schwarz
  6335.       PRINT AT(1,1);CHR$(27);CHR$(112);SPACE$(80);CHR$(27);CHR$(113); ! |1
  6336.       LET bs!=TRUE         ! Bildschirm schwarz merken
  6337.       LET t%=0             ! Weiterlaufen ohne Overflow, deshalb null setzen
  6338.     ENDIF                  !
  6339.     KEYLOOK n%             !
  6340.     IF mx%<>x% OR my%<>y% OR n% ! F Mausbewegung oder Tastendruck
  6341.       IF bs!=TRUE          ! f Blds. bisher schwarz:
  6342.         LET t%=0           ! Weiterlaufen ohne Overflow
  6343.         LET bs!=FALSE      ! Bildschirm nicht mehr schwarz
  6344.         SPUT b$            ! Bildschirm wieder herstellen
  6345.         LET b$=""          ! Versuch, Fehler: 'Speicher voll' zu verhindern
  6346.         SHOWM              ! Maus her
  6347.       ELSE                 ! Bildschirm nicht schwarz:
  6348.         LET t%=0           !
  6349.       ENDIF                !
  6350.     ENDIF                  !
  6351.     LET mx%=MOUSEX         ! X-Koordinate der Maus merken
  6352.     LET my%=MOUSEY         ! Y-Koordinate der Maus merken
  6353.     ' ..........................................................................
  6354.     LET st%=x%-sx|*8                            ! Spaltenterm
  6355.     LET zt%=y%-sy|*16                           ! Zeilenterm
  6356.     ' Aktuelle Spalte (sm%) und Zeile (zm%) ermitteln:
  6357.     LET sm%=TRUNC((st%)/(ml|*8))+1              ! Akt.Spalte
  6358.     LET zm%=TRUNC((zt%)/16)+1                   ! Akt.Zeile
  6359.     ' ..........................................................................
  6360.     ' Beides negativ, f Maus 1 Sp. links oder 1 Zl. oberhalb des Menüs:
  6361.     IF st%<0                                               ! nicht /0
  6362.       LET sm%=0                                            ! Simuliere Sp 0
  6363.       LET zm%=0                                            ! Simuliere Z 0
  6364.       LET mef!=TRUE                                        ! M. n. auf Menü
  6365.     ENDIF                                                  !
  6366.     IF zt%<0                                               ! nicht /0
  6367.       LET sm%=0                                            ! Simuliere Sp 0
  6368.       LET zm%=0                                            ! Simuliere Z 0
  6369.       LET mef!=TRUE                                        ! M. n. auf Menü
  6370.     ENDIF                                                  !
  6371.     ' ..........................................................................
  6372.     IF sm%>sp|             ! Falls Maus rechts der letzten Spalte
  6373.       LET sm%=0            ! Simuliere Spalte 0
  6374.       LET zm%=0            ! Simuliere Zeile 0
  6375.       LET mef!=TRUE        ! Maus ist nicht auf Menüeintrag
  6376.     ENDIF                  !
  6377.     IF zm%>zl|             ! Falls Maus unterhalb der letzten Zeile
  6378.       LET sm%=0            ! Simuliere Spalte 0
  6379.       LET zm%=0            ! Simuliere Zeile 0
  6380.       LET mef!=TRUE        ! Maus ist nicht auf Menüeintrag
  6381.     ENDIF                  !
  6382.     ' ..........................................................................
  6383.     '    PRINT AT(1,15);sm%,zm%,mef!
  6384.     IF erst!=TRUE                                ! F das 1. Mal hier
  6385.       LET erst!=FALSE                            ! Durchgangsnummer > 0
  6386.       IF wv!=TRUE                                ! Menüvorschlag: ja
  6387.         LET sm%=1                                ! Simuliere Spalte 1
  6388.         LET zm%=1                                ! Simuliere Zeile 1
  6389.         LET ms%=sm%                              ! jetzige Spalte merken
  6390.         LET mz%=zm%                              ! jetzige Zeile merken
  6391.         PRINT CHR$(27);CHR$(112);                ! Invers ein
  6392.         LET i|=1                                 ! erste Eintragsnummer
  6393.         ' LET i|=(sm%-1)*zl|+zm%                 ! alte Eintragsnummer
  6394.         PRINT AT(sx|+(sm%-1)*ml|,sy|+zm%);a$(i|)
  6395.         PRINT CHR$(27);CHR$(113);                ! Invers aus
  6396.       ENDIF                                      !
  6397.     ELSE                                         ! Falls mind. 1mal durch
  6398.       IF mef!=FALSE                              ! Maus ist auf Menüeintrag
  6399.         IF sm%<>ms% OR zm%<>mz%                  ! Falls Sp.od.Zle geänd.
  6400.           IF ms%<>0 AND mz%<>0                   ! Letzter Eintr. vorhanden
  6401.             PRINT CHR$(27);CHR$(113);            ! Invers aus
  6402.             LET i|=(ms%-1)*zl|+mz%! alte Eintragsnummer
  6403.             PRINT AT(sx|+(ms%-1)*ml|,sy|+mz%);a$(i|)
  6404.           ENDIF                                  !
  6405.           PRINT CHR$(27);CHR$(112);              ! Invers ein
  6406.           LET i|=(sm%-1)*zl|+zm%                 ! neue Eintragsnummer
  6407.           PRINT AT(sx|+(sm%-1)*ml|,sy|+zm%);a$(i|)
  6408.           PRINT CHR$(27);CHR$(113);              ! Invers aus
  6409.           LET ms%=sm%                            ! jetzige Spalte merken
  6410.           LET mz%=zm%                            ! jetzige Zeile merken
  6411.         ENDIF                                    ! EF Sp. oder Zl. geändert
  6412.       ENDIF                                      !
  6413.     ENDIF                                        !
  6414.     ' ..........................................................................
  6415.     LET m|=MOUSEK                                ! Maustaste retten
  6416.     IF ASC(INKEY$)=13                            ! f Returntaste gedrückt:
  6417.       LET m|=1                                   ! linke MT simulieren
  6418.       LET mef!=FALSE                             ! Simuliere Maus auf Menüfeld
  6419.     ENDIF                                        !
  6420.     EXIT IF mef!=TRUE AND m|                     ! Raus f MT neben Menüfeld
  6421.     ' ..........................................................................
  6422.   UNTIL mef!=FALSE AND m| AND mz%<>0             ! Raus,f RMT auf Menüfeld
  6423.   ' ............................................................................
  6424.   IF mef!=TRUE                                   ! F nicht auf Menüfeld
  6425.     ' ..........................................................................
  6426.     LET w|=0                                     ! Kein Eintrag gewählt
  6427.     ' ..........................................................................
  6428.   ELSE                                           ! F auf Menüfeld
  6429.     ' ..........................................................................
  6430.     IF iv!                                       ! Falls erwünscht:
  6431.       ' Gewählten Eintrag wieder normal darstellen:
  6432.       PRINT CHR$(27);CHR$(113);                  ! Invers aus
  6433.       LET i|=(ms%-1)*zl|+mz%                     ! alte Eintragsnummer
  6434.       PRINT AT(sx|+(ms%-1)*ml|,sy|+mz%);a$(i|)   ! normale Ausgabe
  6435.     ENDIF                                        !
  6436.     ' ..........................................................................
  6437.     LET w|=i|           ! In den Rückgabepar.die Nr.d.gewählten Eintrags
  6438.     ' ..........................................................................
  6439.   ENDIF
  6440.   ' ............................................................................
  6441.   IF bs!=TRUE          ! f Blds. bisher schwarz:
  6442.     LET t%=0           ! Weiterlaufen ohne Overflow
  6443.     LET bs!=FALSE      ! Bildschirm nicht mehr schwarz
  6444.     SPUT b$            ! Bildschirm wieder herstellen
  6445.     LET b$=""          ! Versuch, Fehler: 'Speicher voll' zu verhindern
  6446.     SHOWM              ! Maus her
  6447.   ENDIF                !
  6448.   ' ----------------------------------------------------------------------------
  6449.   ' |1:         Bei der compilierten Version blieb nach Aufruf des Gem-Menüs
  6450.   '             trotz des Befehls Closew 0  immer die erste Zeile ungeschwärzt,
  6451.   '             also versuche ich es jetzt so.
  6452.   ' ----------------------------------------------------------------------------
  6453. RETURN
  6454. > PROCEDURE a_eintraege_waehlen(wv!,ml|,sx|,sy|,sp|,zl|,VAR a$(),a!(),m|,w|)
  6455.   t2t|=26
  6456.   ' ----------------------------------------------------------------------------
  6457.   ' Diese Prozedur sorgt dafür, daß der Menüeintrag, auf den die Maus gerade
  6458.   ' zeigt, invers dargestellt wird. Dabei wird natürlich der letzte Eintrag
  6459.   ' wieder normal dargestellt. Falls der erste Übergabeparameter wv!
  6460.   ' wahr ist, so wird der erste Eintrag beim Aufruf der Prozedur automatisch
  6461.   ' invers dargestellt, so daß die Maus gar nicht mehr gebraucht wird. Ein
  6462.   ' Druck auf die [Return]-Taste reicht, um den vorgeschlagenen Eintrag als
  6463.   ' gewählt zu betrachten und die Prozedur zu verlassen. Statt der [Return]-
  6464.   ' Taste kann man auch die linke Maustaste zum entültigen Wählen benutzen.
  6465.   ' (Die 'Return'-Taste funktioniert jetzt nicht mehr!)
  6466.   ' ----------------------------------------------------------------------------
  6467.   LOCAL mef!               ! Maus nicht auf Menüeintrag ?
  6468.   LOCAL erst!              ! Erster Durchgang ?
  6469.   LOCAL i|                 ! Hier steht die Eintragsnummer
  6470.   LOCAL x%                 ! Maus-x-Koordinate
  6471.   LOCAL y%                 ! Maus-y-Koordinate
  6472.   LOCAL sm%                ! Die Spalte, auf die die Maus gerade zeigt
  6473.   LOCAL zm%                ! Die Zeile, auf die die Maus gerade zeigt
  6474.   LOCAL ms%                ! Speicher für sm%
  6475.   LOCAL mz%                ! Speicher für mz%
  6476.   LOCAL st%                ! Spaltenterm
  6477.   LOCAL zt%                ! Zeilenterm
  6478.   ' ............................................................................
  6479.   LET erst!=TRUE           ! Erster Durchgang
  6480.   ' ............................................................................
  6481. grosse_eingabeschleife:  ! Anfang der Hauptschleife
  6482.   ' ............................................................................
  6483.   REPEAT                   ! Mausabfrageschleife
  6484.     ' ..........................................................................
  6485.     LET mef!=FALSE         ! Maus ist erst mal evtl. auf Menüeintrag
  6486.     ' ..........................................................................
  6487.     SHOWM                  ! Mauszeiger bitte an und zwar immer !!!
  6488.     ' ..........................................................................
  6489.     LET x%=MOUSEX          ! Maus-x-Koordinate
  6490.     LET y%=MOUSEY          ! Maus-y-Koordinate
  6491.     ' ..........................................................................
  6492.     LET st%=x%-sx|*8                            ! Spaltenterm
  6493.     LET zt%=y%-sy|*16                           ! Zeilenterm
  6494.     ' Aktuelle Spalte (sm%) und Zeile (zm%) ermitteln:
  6495.     LET sm%=TRUNC((st%)/(ml|*8))+1              ! Akt.Spalte
  6496.     LET zm%=TRUNC((zt%)/16)+1                   ! Akt.Zeile
  6497.     ' ..........................................................................
  6498.     ' Beides negativ, f Maus 1 Sp. links oder 1 Zl. oberhalb des Menüs:
  6499.     IF st%<0                                               ! nicht /0
  6500.       LET sm%=0                                            ! Simuliere Sp 0
  6501.       LET zm%=0                                            ! Simuliere Z 0
  6502.       LET mef!=TRUE                                        ! M. n. auf Menü
  6503.     ENDIF                                                  !
  6504.     IF zt%<0                                               ! nicht /0
  6505.       LET sm%=0                                            ! Simuliere Sp 0
  6506.       LET zm%=0                                            ! Simuliere Z 0
  6507.       LET mef!=TRUE                                        ! M. n. auf Menü
  6508.     ENDIF                                                  !
  6509.     ' ..........................................................................
  6510.     IF sm%>sp|             ! Falls Maus rechts der letzten Spalte
  6511.       LET sm%=0            ! Simuliere Spalte 0
  6512.       LET zm%=0            ! Simuliere Zeile 0
  6513.       LET mef!=TRUE        ! Maus ist nicht auf Menüeintrag
  6514.     ENDIF                  !
  6515.     IF zm%>zl|             ! Falls Maus unterhalb der letzten Zeile
  6516.       LET sm%=0            ! Simuliere Spalte 0
  6517.       LET zm%=0            ! Simuliere Zeile 0
  6518.       LET mef!=TRUE        ! Maus ist nicht auf Menüeintrag
  6519.     ENDIF                  !
  6520.     ' ..........................................................................
  6521.     '    PRINT AT(1,15);sm%,zm%,mef!
  6522.     IF erst!=TRUE                                ! F das 1. Mal hier
  6523.       LET erst!=FALSE                            ! Durchgangsnummer > 0
  6524.       IF wv!=TRUE                                ! Menüvorschlag: ja
  6525.         LET sm%=1                                ! Simuliere Spalte 1
  6526.         LET zm%=1                                ! Simuliere Zeile 1
  6527.         LET ms%=sm%                              ! jetzige Spalte merken
  6528.         LET mz%=zm%                              ! jetzige Zeile merken
  6529.         PRINT CHR$(27);CHR$(112);                ! Invers ein
  6530.         LET i|=1                                 ! erste Eintragsnummer
  6531.         ' LET i|=(sm%-1)*zl|+zm%                 ! alte Eintragsnummer
  6532.         PRINT AT(sx|+(sm%-1)*ml|,sy|+zm%);a$(i|) ! Eintrag ausgeben
  6533.         PRINT CHR$(27);CHR$(113);                ! Invers aus
  6534.       ENDIF                                      !
  6535.     ELSE                                         ! Falls mind. 1mal durch
  6536.       IF mef!=FALSE                              ! Maus ist auf Menüeintrag
  6537.         IF sm%<>ms% OR zm%<>mz%                  ! Falls Sp.od.Zle geänd.
  6538.           IF ms%<>0 AND mz%<>0                   ! Letzter Eintr. vorhanden
  6539.             PRINT CHR$(27);CHR$(113);            ! Invers aus
  6540.             LET i|=(ms%-1)*zl|+mz%               ! alte Eintragsnummer
  6541.             IF a!(i|)=FALSE                      ! F nicht gewählt:
  6542.               PRINT AT(sx|+(ms%-1)*ml|,sy|+mz%);a$(i|)  ! Eintrag ausgeben
  6543.             ENDIF                                !
  6544.           ENDIF                                  !
  6545.           PRINT CHR$(27);CHR$(112);              ! Invers ein
  6546.           LET i|=(sm%-1)*zl|+zm%                 ! neue Eintragsnummer
  6547.           PRINT AT(sx|+(sm%-1)*ml|,sy|+zm%);a$(i|)
  6548.           PRINT CHR$(27);CHR$(113);              ! Invers aus
  6549.           LET ms%=sm%                            ! jetzige Spalte merken
  6550.           LET mz%=zm%                            ! jetzige Zeile merken
  6551.         ENDIF                                    ! EF Sp. oder Zl. geändert
  6552.       ENDIF                                      !
  6553.     ENDIF                                        !
  6554.     ' ..........................................................................
  6555.     LET m|=MOUSEK                                ! Maustaste retten
  6556.     IF m|=2                                      ! F rechte Maustaste:
  6557.       LET mef!=TRUE                              ! Auch raus
  6558.     ENDIF                                        !
  6559.     EXIT IF mef!=TRUE AND m|                     ! Raus f MT neben Menüfeld
  6560.     ' ..........................................................................
  6561.   UNTIL mef!=FALSE AND m| AND mz%<>0             ! Raus,f RMT auf Menüfeld
  6562.   ' ............................................................................
  6563.   IF mef!=FALSE                                  ! F auf Menüfeld
  6564.     ' ..........................................................................
  6565.     ' Gewählten Eintrag merken, d.h. in a!() als gewählt/nicht gew. verzeichnen:
  6566.     ' ..........................................................................
  6567.     LET i|=(ms%-1)*zl|+mz%                       ! alte Eintragsnummer
  6568.     ' ..........................................................................
  6569.     IF a!(i|)=TRUE                               ! F bereits gewählt:
  6570.       LET a!(i|)=FALSE                           ! Code für 'Eintrag nicht gew.'
  6571.       PRINT CHR$(27);CHR$(113);                  ! Invers aus
  6572.       PRINT AT(sx|+(ms%-1)*ml|,sy|+mz%);a$(i|)   ! Eintrag ausgeben
  6573.     ELSE                                         ! F noch nicht gewählt:
  6574.       LET a!(i|)=TRUE                            ! Code für 'Eintrag gewählt'
  6575.       PRINT CHR$(27);CHR$(112);                  ! Invers ein
  6576.       PRINT AT(sx|+(ms%-1)*ml|,sy|+mz%);a$(i|)   ! Eintrag ausgeben
  6577.       LET w|=1                                   ! etwas gewählt
  6578.     ENDIF                                        ! EFU bereits gewählt/nicht gew
  6579.     ' ..........................................................................
  6580.     REPEAT            ! Warteschleife für Mauseingabe:
  6581.     UNTIL MOUSEK=0    ! Erst Raus,wenn Maus nix mehr meldet,also Puffer leer
  6582.     ' ..........................................................................
  6583.     GOTO grosse_eingabeschleife                  ! geh zum Anfang der Hauptschl.
  6584.     ' ..........................................................................
  6585.   ENDIF                                          !
  6586.   PRINT CHR$(27);CHR$(113);                      ! Invers aus
  6587.   ' ----------------------------------------------------------------------------
  6588. RETURN
  6589. > PROCEDURE a_eintraginput(ml7|,di7|,sx7|,sy7|,sp7|,zl7|,m7|,w7|,VAR a7$())
  6590.   t2t|=27
  6591.   ' ----------------------------------------------------------------------------
  6592.   ' Hier kann man in einem Menüeintrag etwas eingeben.
  6593.   ' ----------------------------------------------------------------------------
  6594.   LOCAL si7|                ! Spalte für Input
  6595.   LOCAL zi7|                ! Zeile für Input
  6596.   ' ............................................................................
  6597.   '  si7|=TRUNC(w7|/sp7|)+1                       ! Spalte f.Input
  6598.   '  PRINT AT(1,1);"w7|,sp7|,si7|,zl7|"           ! Zeile f. Input
  6599.   '  PRINT AT(1,2);w7|,sp7|,si7|,zl7|             ! Zeile f. Input
  6600.   '  zi7|=w7|-(si7|-1)*zl7|                       ! Zeile f. Input
  6601.   ' ..........................................................................
  6602.   LET x7%=MOUSEX                                  ! Maus-x-Koordinate
  6603.   LET y7%=MOUSEY                                  ! Maus-y-Koordinate
  6604.   LET st7%=x7%-sx7|*8                             ! Spaltenterm
  6605.   LET zt7%=y7%-sy7|*16                            ! Zeilenterm
  6606.   ' Aktuelle Spalte (sm7%) und Zeile (zm7%) ermitteln:
  6607.   LET sm7%=TRUNC((st7%)/(ml7|*8))+1               ! Akt.Spalte
  6608.   LET zm7%=TRUNC((zt7%)/16)+1                     ! Akt.Zeile
  6609.   LET si7|=sm7%                                   ! Var-Type ändern
  6610.   LET zi7|=zm7%                                   ! Var-Type ändern
  6611.   ' ............................................................................
  6612.   '  PRINT AT(sx7|+(si7|-1)*ml7|-1,sy7|+zi7|);    ! Positionieren
  6613.   ' ............................................................................
  6614.   LET a$=a7$(w7|)                                 ! Zwischenspeicher
  6615.   @a_input(sx7|+(si7|-1)*ml7|,sy7|+zi7|,ml7|-1,m7|,a$)! Eingabe
  6616.   LET a7$(w7|)=a$                                 ! Rückgabe
  6617.   '  FORM INPUT ml7|-1 AS a7$(w7|)                ! Eingabe
  6618.   ' ............................................................................
  6619.   ' Alle Strings wurden, um das Input überhaupt zu ermöglichen, um di7|
  6620.   ' Spaces am rechten Rand erweitert, das muß auch mit dem geängerten
  6621.   ' String geschehen. Das passiert in der folgenden Zeile:
  6622.   LET a7$(w7|)=a7$(w7|)+SPACE$(di7|)
  6623.   ' ----------------------------------------------------------------------------
  6624. RETURN
  6625. > PROCEDURE a_input(sp|,zl|,l|,m|,VAR a$)
  6626.   ' ----------------------------------------------------------------------------
  6627.   ' Ersetzt das GFA-Input. Zurück geht immer ein String der Länge l|, notfalls
  6628.   ' rechts mit Spaces aufgefüllt.
  6629.   ' ----------------------------------------------------------------------------
  6630.   ' sp|                                 ! Startspalte der Eingabe
  6631.   ' zl|                                 ! Startzeile der Eingabe
  6632.   ' l|                                  ! Sollänge der Eingabe
  6633.   ' m|                                  ! Maustaste, vorerst nicht benutzt
  6634.   ' a$                                  ! Eingabestring,evtl. ist Vorschlag drin
  6635.   LOCAL z|                              ! Ascii-Speicher für eingegebenes Zeichn
  6636.   LOCAL al|                             ! Aktuelle Länge des Eingabestrings
  6637.   LOCAL b$                              ! Cursorspeicher
  6638.   ' ............................................................................
  6639.   LET a$=LEFT$(a$,l|)                   ! Überflüssiges am Vorschlagstring weg.
  6640.   ' ............................................................................
  6641.   LET b$=CHR$(27)+CHR$(112)+" "         ! Cursor konstruieren
  6642.   LET b$=b$+CHR$(27)+CHR$(113)          ! Cursor konstruieren
  6643.   PRINT AT(sp|,zl|);a$;b$               ! Cursor ein
  6644.   ' ............................................................................
  6645.   HIDEM                                 ! Mauspfeil weg
  6646.   REPEAT                                ! Warteschleife für Maus- und Tastatur-
  6647.   UNTIL MOUSEK=0 AND INKEY$=""          ! puffer
  6648.   ' ............................................................................
  6649.   DO                                    ! Hauptschleifenanfang
  6650.     ' ..........................................................................
  6651.     REPEAT                              ! Eingabeschleife
  6652.       LET z|=ASC(INKEY$)                ! Zeichen von der Tastatur lesen
  6653.       LET m|=MOUSEK                     ! Maustaste retten
  6654.       IF MOUSEK                         ! F Maustaste gedrückt
  6655.         LET z|=13                       ! Tu so, als sei 'Return'-Taste gedrückt
  6656.       ENDIF                             !
  6657.     UNTIL z|=8 OR z|=13 OR z|>31        ! Raus f Zeichen eingegeben
  6658.     LET al|=LEN(a$)                     ! Aktuelle Länge abspeichern
  6659.     EXIT IF z|=13                       ! Raus f 'RETURN'-Taste gedrückt
  6660.     ' ..........................................................................
  6661.     IF z|=8 AND al|>0                   ! F 'BACKSPACE'-Taste und String<>leer
  6662.       LET a$=LEFT$(a$,al|-1)            ! Backspace ausführen
  6663.       DEC al|                           ! Aktuelle Stringlänge aktualisieren
  6664.       PRINT AT(sp|,zl|);a$;b$;          ! Zchn raus
  6665.       IF al|<l|                         ! F akt. Länge < Sollänge
  6666.         PRINT SPACE$(l|-al|)            ! rechts Vom Cursor weiß
  6667.       ENDIF                             !
  6668.     ELSE IF al|<l| AND z|>31            ! F Normale Taste und kleiner Maxlänge
  6669.       LET a$=a$+CHR$(z|)                ! Eingabestring erweitern
  6670.       LET a$=UPPER$(a$)                 ! Nur Großbuchstaben
  6671.       INC al|                           ! Aktuelle Stringlänge aktualisieren
  6672.       PRINT AT(sp|,zl|);a$;b$;          ! Zchn raus
  6673.       IF al|<l|                         ! F akt. Länge < Sollänge
  6674.         PRINT SPACE$(l|-al|)            ! rechts Vom Cursor weiß
  6675.       ENDIF                             !
  6676.     ENDIF                               !
  6677.     ' ..........................................................................
  6678.   LOOP                                  ! Hauptlschleifenende
  6679.   ' ............................................................................
  6680.   PRINT AT(sp|,zl|);a$;" "              ! Cursor aus
  6681.   LET a$=a$+SPACE$(l|-al|)              ! Rechts mit Spaces auffüllen
  6682.   ' ----------------------------------------------------------------------------
  6683. RETURN
  6684. > PROCEDURE a_menueeintraege_minus_di8(sp8|,zl8|,ml8|,di8|,VAR a8$())
  6685.   ' ----------------------------------------------------------------------------
  6686.   ' Hier wird die zusätzliche Länge für Input wieder abgezogen
  6687.   ' ----------------------------------------------------------------------------
  6688.   LOCAL i8|                         ! Zähler für Einträge
  6689.   ' ............................................................................
  6690.   LET di8|=1                        ! Für Input zusätliche di8| Spaces
  6691.   ' ............................................................................
  6692.   FOR i8|=1 TO sp8|*zl8|            ! Alle Einträge durch
  6693.     LET a8$(i8|)=LEFT$(a8$(i8|),ml8|-di8|)  ! Inputlängenzugabe wieder abziehen
  6694.   NEXT i8|                          ! nächster Eintrag
  6695.   ' ----------------------------------------------------------------------------
  6696. RETURN
  6697. ' ##############################################################################
  6698. '  D A T E N :
  6699. ' ##############################################################################
  6700. > PROCEDURE 0_menuedaten
  6701.   ' ----------------------------------------------------------------------------
  6702. hauptmenue:
  6703.   DATA  Speicher
  6704.   DATA  Arbeiten
  6705.   DATA  Blockfkt
  6706.   DATA  Hilf/End
  6707.   DATA ##
  6708.   ' ............................................................................
  6709. diskette:
  6710.   DATA Accessories
  6711.   DATA ------------------------------
  6712.   DATA Stück von Diskette laden
  6713.   DATA Stück auf Diskette abspeichern
  6714.   DATA ------------------------------
  6715.   DATA Stück aus Hauptfile laden
  6716.   DATA Stück in  Hauptfile abspeichern
  6717.   DATA ------------------------------
  6718.   DATA Hauptfile laden
  6719.   DATA Hauptfile abspeichern
  6720.   DATA bestimmte Stücke löschen
  6721.   DATA ------------------------------
  6722.   DATA 2.Hauptfile laden
  6723.   DATA 1. & 2.Hauptfile vertauschen
  6724.   DATA best. Stücke ins 2.Hptfle kop.
  6725.   DATA ------------------------------
  6726.   DATA beliebiges Diskfile löschen
  6727.   DATA Diskfile umbenennen
  6728.   DATA ##
  6729.   ' ............................................................................
  6730. arbeiten:
  6731.   DATA Midi ausschalten
  6732.   DATA Nr-Ton-Codierung ausschalten
  6733.   DATA Taktschlagzeug ausschalten
  6734.   DATA ---------------------------------
  6735.   DATA Gebundenzeichen setzen/löschen
  6736.   DATA Unt.Klav.zchn setzen/löschen
  6737.   DATA Taktstrich setzen/löschen
  6738.   DATA ---------------------------------
  6739.   DATA Basistonlänge verändern
  6740.   DATA bestimmte Stücke spielen
  6741.   DATA best.St.direkt hintereinander sp.
  6742.   DATA alle Stücke ab Nr x spielen
  6743.   DATA ---------------------------------
  6744.   DATA Stücknamen ändern
  6745.   DATA Inhaltsverzeichnis alph. ordnen
  6746.   DATA ---------------------------------
  6747.   DATA Inhaltsverz.vom Hauptfile drucken
  6748.   DATA Aktuelles Stück drucken
  6749.   DATA bestimmte Stücke drucken
  6750.   DATA ##
  6751.   ' ............................................................................
  6752. blockfkt:
  6753.   DATA Blockanfang/-ende setzen
  6754.   DATA Blockmarkierung löschen
  6755.   DATA ---------------------------------
  6756.   DATA Block kopieren
  6757.   DATA ---------------------------------
  6758.   DATA Blocknotenlängen verdoppeln
  6759.   DATA Blocknoten transponieren
  6760.   DATA automatisch Taktstrich setzen
  6761.   DATA suchen und ersetzen im Block
  6762.   DATA ---------------------------------
  6763.   DATA Block löschen
  6764.   DATA ##
  6765.   ' ............................................................................
  6766. prg_ende:
  6767.   DATA Hilfstext
  6768.   DATA -----------------------
  6769.   ' Folgenden Menüpunkt gibt's in der PD-Version nicht:
  6770.   DATA Edit
  6771.   DATA -----------------------
  6772.   DATA Quit
  6773.   DATA ##
  6774.   ' ----------------------------------------------------------------------------
  6775. RETURN
  6776. > PROCEDURE 0_gemmenuedaten
  6777.   ' ----------------------------------------------------------------------------
  6778. gemmenuedaten:         ! Read-Zeiger setzen
  6779.   ' ............................................................................
  6780.   DATA Desk, Duedita ,--------------------,1,2,3,4,5,6,
  6781.   DATA Zurück, Zurück,##
  6782.   ' ----------------------------------------------------------------------------
  6783. RETURN
  6784. > PROCEDURE 0_notenkopf_y_start_daten
  6785.   ' ----------------------------------------------------------------------------
  6786. y_anfang_notenkopf:                           ! dito innerhalb einer Note |2
  6787.   DATA 2,5,7,7,10,10,12,12,15,17,17
  6788.   DATA 20,20,22,25,25,27,27,30,30
  6789.   DATA 32,35,35,37,37
  6790.   ' ----------------------------------------------------------------------------
  6791. RETURN
  6792. > PROCEDURE 0_notenkopfdaten
  6793.   ' ----------------------------------------------------------------------------
  6794. rekonstruktionsdaten:                         !
  6795.   DATA 632,343,632,343
  6796.   DATA 632,343,632,343
  6797.   DATA 632,343,632,343
  6798.   DATA 632,343,632,343
  6799.   DATA 632,343,632,343
  6800.   DATA 632,343,632,343
  6801.   DATA 631,343,632,343
  6802.   DATA 631,343,631,343
  6803.   DATA 631,343,631,343
  6804.   DATA 631,344,631,343
  6805.   DATA 630,344,631,344
  6806.   DATA 630,344,630,344
  6807.   DATA 630,345,630,344
  6808.   DATA 630,346,630,345
  6809.   DATA 630,346,630,346
  6810.   DATA 631,347,630,346
  6811.   DATA 631,348,631,347
  6812.   DATA 632,348,631,348
  6813.   DATA 632,348,632,348
  6814.   DATA 633,348,633,348
  6815.   DATA 634,348,633,348
  6816.   DATA 634,348,634,348
  6817.   DATA 634,348,634,348
  6818.   DATA 635,348,634,348
  6819.   DATA 635,348,635,348
  6820.   DATA 635,348,635,348
  6821.   DATA 635,347,635,348
  6822.   DATA 635,347,635,347
  6823.   DATA 635,345,635,347
  6824.   DATA 635,344,635,345
  6825.   DATA 635,343,635,344
  6826.   DATA 635,341,635,343
  6827.   DATA 635,340,635,341
  6828.   DATA 635,339,635,340
  6829.   DATA 633,337,635,339
  6830.   DATA 633,336,633,337
  6831.   DATA 632,335,633,336
  6832.   DATA 632,333,632,335
  6833.   DATA 632,332,632,333
  6834.   DATA 632,331,632,332
  6835.   DATA 631,329,632,331
  6836.   DATA 631,327,631,329
  6837.   DATA 630,326,631,327
  6838.   DATA 630,325,630,326
  6839.   DATA 629,324,630,325
  6840.   DATA 629,322,629,324
  6841.   DATA 628,322,629,322
  6842.   DATA 628,320,628,322
  6843.   DATA 628,319,628,320
  6844.   DATA 628,318,628,319
  6845.   DATA 627,317,628,318
  6846.   DATA 627,316,627,317
  6847.   DATA 627,314,627,316
  6848.   DATA 627,314,627,314
  6849.   DATA 627,313,627,314
  6850.   DATA 627,312,627,313
  6851.   DATA 627,311,627,312
  6852.   DATA 627,311,627,311
  6853.   DATA 628,310,627,311
  6854.   DATA 628,309,628,310
  6855.   DATA 628,309,628,309
  6856.   DATA 629,309,628,309
  6857.   DATA 629,308,629,309
  6858.   DATA 630,308,629,308
  6859.   DATA 630,308,630,308
  6860.   DATA 630,308,630,308
  6861.   DATA 632,307,630,308
  6862.   DATA 632,307,632,307
  6863.   DATA 632,307,632,307
  6864.   DATA 632,307,632,307
  6865.   DATA 632,307,632,307
  6866.   DATA 633,307,632,307
  6867.   DATA 634,308,633,307
  6868.   DATA 634,309,634,308
  6869.   DATA 635,311,634,309
  6870.   DATA 635,312,635,311
  6871.   DATA 636,312,635,312
  6872.   DATA 636,314,636,312
  6873.   DATA 636,315,636,314
  6874.   DATA 636,316,636,315
  6875.   DATA 636,317,636,316
  6876.   DATA 636,318,636,317
  6877.   DATA 636,319,636,318
  6878.   DATA 636,321,636,319
  6879.   DATA 636,322,636,321
  6880.   DATA 636,323,636,322
  6881.   DATA 635,324,636,323
  6882.   DATA 634,325,635,324
  6883.   DATA 633,326,634,325
  6884.   DATA 632,326,633,326
  6885.   DATA 632,327,632,326
  6886.   DATA 630,329,632,327
  6887.   DATA 630,329,630,329
  6888.   DATA 629,331,630,329
  6889.   DATA 628,331,629,331
  6890.   DATA 628,332,628,331
  6891.   DATA 627,334,628,332
  6892.   DATA 627,335,627,334
  6893.   DATA 627,335,627,335
  6894.   DATA 627,336,627,335
  6895.   DATA 627,336,627,336
  6896.   DATA 627,337,627,336
  6897.   DATA 628,338,627,337
  6898.   DATA 629,339,628,338
  6899.   DATA 630,339,629,339
  6900.   DATA 631,339,630,339
  6901.   DATA 632,339,631,339
  6902.   DATA 633,339,632,339
  6903.   DATA 633,339,633,339
  6904.   DATA 634,339,633,339
  6905.   DATA 634,339,634,339
  6906.   DATA 634,339,634,339
  6907.   DATA 635,339,634,339
  6908.   DATA 636,338,635,339
  6909.   DATA 636,338,636,338
  6910.   DATA 636,336,636,338
  6911.   DATA 636,335,636,336
  6912.   DATA 636,333,636,335
  6913.   DATA 636,333,636,333
  6914.   DATA 635,333,636,333
  6915.   DATA 634,333,635,333
  6916.   DATA 632,333,634,333
  6917.   DATA 632,333,632,333
  6918.   DATA 631,333,632,333
  6919.   DATA 630,333,631,333
  6920.   DATA 630,334,630,333
  6921.   DATA 630,335,630,334
  6922.   DATA 630,335,630,335
  6923.   DATA 630,336,630,335
  6924.   DATA 630,337,630,336
  6925.   DATA 630,337,630,337
  6926.   DATA 630,337,630,337
  6927.   DATA 632,344,632,344
  6928.   DATA 632,344,632,344
  6929.   DATA 632,344,632,344
  6930.   DATA 633,344,632,344
  6931.   DATA 633,344,633,344
  6932.   DATA 633,344,633,344
  6933.   DATA 633,344,633,344
  6934.   DATA 633,343,633,344
  6935.   DATA 633,343,633,343
  6936.   DATA 632,343,633,343
  6937.   DATA 632,343,632,343
  6938.   DATA 632,343,632,343
  6939.   DATA 631,343,632,343
  6940.   DATA 631,343,631,343
  6941.   DATA 631,343,631,343
  6942.   DATA 632,344,631,343
  6943.   DATA 632,344,632,344
  6944.   DATA 632,344,632,344
  6945.   DATA 632,344,632,344
  6946.   DATA 632,344,632,344
  6947.   DATA 632,344,632,344
  6948.   DATA 632,344,632,344
  6949.   DATA 632,344,632,344
  6950.   DATA 632,344,632,344
  6951.   DATA 632,344,632,344
  6952.   DATA 633,344,632,344
  6953.   DATA 633,344,633,344
  6954.   DATA 633,344,633,344
  6955.   DATA 633,344,633,344
  6956.   DATA -1,0,0,0
  6957.   ' ----------------------------------------------------------------------------
  6958. RETURN
  6959. > PROCEDURE 0_hilfstextdaten
  6960.   ' ----------------------------------------------------------------------------
  6961. hilfstext:
  6962.   DATA ---------------------------------------------------------------------------
  6963.   DATA H I L F S T E X T   Z U   D U E D I T A  2 . 0
  6964.   DATA ---------------------------------------------------------------------------
  6965.   DATA Dieser Hilfstext..............Helptaste
  6966.   DATA Note vor Cursor löschen.......Backspace-Taste
  6967.   DATA Leerplatz vor Cursor..........Insert-Taste
  6968.   DATA Undo nach ....................Undo-Taste (laden/Blck löschen/verdoppeln)
  6969.   DATA ---------------------------------------------------------------------------
  6970.   DATA Noten abspielen...............Rechte Maustaste auf Vor-Cursor-Note
  6971.   DATA Cursor neu setzen.............Linke Maustaste auf Nicht-Cursor-Note
  6972.   DATA Taktstrich setzen / löschen...Linke Maustaste auf Cursor-Note
  6973.   DATA Gebundenzchn setzen / löschen.Rechte Maustaste auf Cursor-Note
  6974.   DATA Unt.Klaviaturzchn stzn/löschn.Rechte Maustaste auf Hinter-Cursor-Note
  6975.   DATA Blockanfang / - ende setzen...Rechte Maust. + Alt.-taste auf Cursor-Note
  6976.   DATA Block kopieren................rechte Mt + Shiftlinks-taste auf Nicht-Blckn
  6977.   DATA Block löschen.................rechte Maustaste + Ctrl.-taste auf Blocknte
  6978.   DATA Blocknotenlängen verdoppeln...rechte Maustaste + Alt.-taste Blocknote
  6979.   DATA Blocknoten transponieren......rechte Maustaste auf Blocknote
  6980.   DATA ---------------------------------------------------------------------------
  6981.   DATA Ton ausschließlich hören......Klaviaturtaste
  6982.   DATA Ton hören und übernehmen......Klaviaturtaste + Alternate-Taste
  6983.   DATA Pause.........................Space-Taste
  6984.   DATA ---------------------------------------------------------------------------
  6985.   DATA ##
  6986.   ' ----------------------------------------------------------------------------
  6987. RETURN
  6988. > PROCEDURE 0_notennamen
  6989.   ' ----------------------------------------------------------------------------
  6990. notennamen:
  6991.   DATA C,Cis,D,Dis,E,F,Fis,G,Gis,A,Ais,H
  6992.   DATA c,cis,d,dis,e,f,fis,g,gis,a,ais,h
  6993.   DATA c',cis',d',dis',e',f',fis',g',gis',a',ais',h'
  6994.   DATA c'',cis'',d'',dis'',e'',f'',fis'',g'',gis'',a'',ais'',h''
  6995.   DATA c''',P
  6996.   DATA ##
  6997.   ' ----------------------------------------------------------------------------
  6998. RETURN
  6999. ' ##############################################################################
  7000. '  P R O G R A M M T E X T E N D E :
  7001. ' ##############################################################################
  7002.